آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

انتخاب عکس و ایجاد یک نوشته روی عکس و ذخیره اون عکس

parsarezaei  11 سال پیش  11 سال پیش
+5 0

سلام همون طور که از تیتر سوال مشخصه میخام یک عکس انتخاب کنم از گالری یا از داخل خود برنامه و بعد روی عکس بنویسم و سپس بتونم عکس رو با اون نوشته در گالری ذخیره کنم . اگه ممکن راهنمایی کنید

+1 0
بعد از اینکه روی عکس نوشتید برای ذخیره، از imageView یه اسکرین شات بگیرید (11 سال پیش)
0 0
چه جوری؟ (11 سال پیش)
 برای این سوال 9 پاسخ وجود دارد.
پاسخ به سوال 
hosseinAmini  11 سال پیش
+4 0

با این کد میشه از view مورد نظر اسکرین شات گرفت. اون دوتا 700 هم سایز اسکرین شات گرفته شدس

yourView.setDrawingCacheEnabled(true);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(yourView.getDrawingCache(), 700,
700, true);
0 0
انوقت این اسکیرین شات کجا ذخیره میشه؟ (11 سال پیش)
0 0
ذخیره نمیشه.همونطور که معلومه یه bitmap میده(resizedBitmap) که می تونی این bitmap رو ذخیره کنی. (11 سال پیش)
0 0
اهان مرسی (11 سال پیش)
0 0
سلام . وقتی از ویو مورد نظرم عکس گرفتم چجوری توی sdkard ذخیره کنم ؟ (11 سال پیش)
پاسخ به سوال 
سجاد زهره ای  11 سال پیش
+2 0

سلام به کمک این کد گالری رو باز میکنی

Intent pickPhoto = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto, 1);

توسط متد زیر به صورت خودکار عکس انتخاب شده در یک imageview نمایش داده میشه

 	@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Ui ui = new Ui(getWindow().getDecorView());
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
File imageFile = new File(getRealPathFromURI(selectedImageUri));
NameImage = imageFile.getName();
Toast.makeText(G.context, NameImage, Toast.LENGTH_SHORT).show();
selectedImagePath = getPath(selectedImageUri);
System.out.println("Image Path : " + selectedImagePath);
imgImage.setImageURI(selectedImageUri);
} else if (requestCode == SELECT_PICTURE_CAMERA) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
ui.imgImage.setImageBitmap(photo);
}
}
}

وحالا خیلی راحت عکسی که داخل imageview هستو ذخیره کن داخل sdcard....از طریق bitmap

 تعریف متغیر ها:

 	public String NameImage;
private static final int SELECT_PICTURE = 1;
private static final int SELECT_PICTURE_CAMERA = 0;

 

 

 

 

0 0
مرسی اما کدتون از متقیرر UI ایراد میگیره همچنین از و SELECT_PICTURE_CAMERAو NameImage (11 سال پیش)
0 0
و چه جوری دخیره کنم؟ (11 سال پیش)
+1 0
اها شرمنده شما نیاز به ui ندارین!و nameimage یه متغیر هست که اسم عکسو داخل خودش ذخیره میکنه!خب اول باید تعریفش کنید.و همچنین متغیر SELECT_PICTURE_CAMERA الان من نحوه تعریفشو اضافه میکنم (11 سال پیش)
0 0
یه سوال دیگه من میخام یک عکس از گالری انتخاب کنم و اونو توی sdcard ذخیره کنم و تو دیتابیس هم ذخیره کنم چه جوری این کار رو باید بکنم؟ (11 سال پیش)
0 0
اینم که میدونید که متغیر imgImage در اصل همون ImageView هست که میخوام عکس داخلش نماش بدم (11 سال پیش)
0 0
بله اگه ممکنه یک پروژه یا راهنمایی کنید که چه جوری میتونم عکس و تو دیتابیس ذخیره کنم تو سرویس گشتم اما هیچی نفهمیدم اینقدر گنگ بود (11 سال پیش)
0 0
نگاه دوست عزیز انتخاب از گالری هم به همین شکله!الان انتخاب از گالری هم اضافه میکنم (11 سال پیش)
پاسخ به سوال 
parsarezaei  11 سال پیش
+2 0

خودم با این کد میتونم از گالری عکس انتخاب کنم ونمایش بدم اما نمیدونم چه جوری تو دیتابیس ذخیره کنم؟

 package ir.selectphtofromgallery.com;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;


public class SelectImageFromGalleryActivity extends Activity {

    private static final int SELECT_PICTURE    = 1;

    Button                   btnBrowse;

    //  private String           filemanagerstring;
    private static int       RESULT_LOAD_IMAGE = 1;
    // private static int       PICK_FROM_GALLERY = 1;
    private ImageView        img2;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        img2 = (ImageView) findViewById(R.id.img);

        btnBrowse = (Button) findViewById(R.id.bnBrowse);
        btnBrowse.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                // TODO Auto-generated method stub
                Intent pickPhoto = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(pickPhoto, 1);

            }
        });

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();

            ImageView imageView = (ImageView) findViewById(R.id.img);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
            imageView.setMaxHeight(500);
            imageView.setMaxWidth(500);

        }
    }
}
 
0 0
شما یه button هم واسه ذخیره بسازین و اینجا متد onclick رو فرخوانی کنید تا من واستون جایگزین کنم (11 سال پیش)
0 0
همون button btnbrows خوبه بقیشو نفهمیدم اگه بتونین جایگزین کنین خیلی خیلی ممنون میشم :) (11 سال پیش)
پاسخ به سوال 
سجاد زهره ای  11 سال پیش
+2 0

 

اینو ببین

 package ir.selectphtofromgallery.com;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class SelectImageFromGalleryActivity extends Activity {

private static final int SELECT_PICTURE = 1;

Button btnBrowse;
Button btnSave;

// private String filemanagerstring;
private static int RESULT_LOAD_IMAGE = 1;
// private static int PICK_FROM_GALLERY = 1;
private ImageView img2;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
img2 = (ImageView) findViewById(R.id.img);

btnSave = (Button) findViewById(R.id.btnSave);
btnSave.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if (img2.getDrawable() != null) {
Thread SaveImage = new Thread(new Runnable() {

@Override
public void run() {
Bitmap bitmap;
File image;
boolean success;
BitmapDrawable drawable = (BitmapDrawable) img2
.getDrawable();
bitmap = drawable.getBitmap();
new File(G.DIR_IMAGE + G.date + "/" + G.id)
.mkdirs();
image = new File("آدرس محلی که میخوای ذخیره کنی", "نام عکس");
success = false;

// Encode the file as a PNG image.
FileOutputStream outStream;
try {

outStream = new FileOutputStream(image);
bitmap.compress(Bitmap.CompressFormat.PNG, 100,
outStream);
/* 100 to keep full quality of the image */

outStream.flush();
outStream.close();

success = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

if (success) {
G.HANDLER.post(new Runnable() {

@Override
public void run() {
Toast.makeText(G.context,
"تصویر ذخیره شد",
Toast.LENGTH_LONG).show();
}
});

} else {
G.HANDLER.post(new Runnable() {

@Override
public void run() {
Toast.makeText(G.context,
"مشکل در ذخیره سازی",
Toast.LENGTH_LONG).show();
}
});

}
}
});
SaveImage.start();
} else {
Toast.makeText(G.context, "ابتدا یک عکس انتخاب کنید!",
Toast.LENGTH_LONG).show();
}
}
});

btnBrowse = (Button) findViewById(R.id.bnBrowse);
btnBrowse.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

// TODO Auto-generated method stub
Intent pickPhoto = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto, 1);

}
});

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&& null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };

Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();

ImageView imageView = (ImageView) findViewById(R.id.img);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
imageView.setMaxHeight(500);
imageView.setMaxWidth(500);

}
}
}

 

0 0
یه سری جاها به کلاس G اشاره شده اگه ممکنه اون کلاس رو هم بزارید چون ارور میگیره (11 سال پیش)
+1 0
درست شد اما یه مشکل دیگه که دارم اینه که چه جوری باید عکس رو از sdcrd بخونم و نمایش بدم؟ (11 سال پیش)
0 0
داخل imageView میخوای نمایش بدی؟ (11 سال پیش)
پاسخ به سوال 
doost_fu  11 سال پیش
+1 0

سلام
داخل این کد پست بالا در خطی که علامت گذشتم موقع انتخاب عکس از گالری در بعضی مواقع نرم افزار کرش میکنه !
دلیلش چیه چرا بعضی مواقع کرش میکنه ؟
ممنون

 @Override
protectedvoid onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode, resultCode, data);

if(requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&&null!= data){
Uri selectedImage = data.getData();
String[] filePathColumn ={MediaStore.Images.Media.DATA };

Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn,null,null,null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();

ImageView imageView =(ImageView) findViewById(R.id.img);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); <<<<<<< کرش
imageView.setMaxHeight(500);
imageView.setMaxWidth(500);

}
}

به این نتیجه رسیدم که دلیلش بزرگ بودن حجم و سایز عکسه ...  ولی راه حل ؟

پاسخ به سوال 
hosseinAmini  11 سال پیش
+2 0

این آموزش میتونه کمکتون کنه.
از این متد استفاده کنید. روش استفاده هم اینه که uri تصویر رو همراه با سایزی که میخوای تصویر انتخاب شده از گالری  بزرگتر از اون نباشه رو بهش می دید، خودش اندازه تصویر رو تغییر میده. حالا اگر تصویری که از گالری انتخاب می کنی بزرگتر از عددی باشه که به این متد ارسال کردی خودش تصویر رو کوچیک می کنه و دیگه برنامه کرش نمی کنه.

public static Bitmap decodeUri(Context c, Uri uri, final int requiredSize) throws FileNotFoundException {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(c.getContentResolver().openInputStream(uri), null, o);

int width_tmp = o.outWidth
, height_tmp = o.outHeight;
int scale = 1;

while(true) {
if(width_tmp / 2 < requiredSize || height_tmp / 2 < requiredSize){
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}

BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(c.getContentResolver().openInputStream(uri), null, o2);
}
0 0
ممنون ، اون لینک اول که برا کراپ کردن بود من نیازی به کراپ ندارم و این کدی هم که گذاشتید با مقدار uri صدا زدم و مقدار برگشتی گرفتم و روی imgeView ست کردم ولی همون مشکل پابرجا بود . راهی وجود نداره که همون عکس انتخابی با هر سایزی بدون تغیییر وارد برنامه بشه ؟ اخه نمی خوام کیفیت عکس هم کم بشه ! با تشکر . (11 سال پیش)
+1 0
آخ ببخشید uri باید ارسال می کردید اصلا یادم نبود :) خواهش می کنم. والا منم این مشکل رو داشتم بعد از کلی جست و جو تو stackoverflow یه نفر این روش رو پیشنهاد داده بود و مشکلم کامل حل شد. (روش دیگه رو نمی دونم هست یا نه). شما سایز رو 1000 بده و برای context اکتیویتی ای رو که توش هستی رو بده، ببین مشکلت حل میشه.. (11 سال پیش)
پاسخ به سوال 
doost_fu  11 سال پیش
0 0

من متد اینجوری صدا زدم :

 decodeUri(MainActivity.this,selectedImage,1000);

و مقدار BitmapFactory.Options به صورت فیلد تعریف کردم که بشه برگردوند حالا شما برا گرفتن مقدار برگشتی و set کرد روی imageView چیکار میکنی ؟ اون خط کد برا گرفتن این مقدار چجوری باید نوشت ؟
ممنون

پاسخ به سوال 
hosseinAmini  11 سال پیش
+1 0

نه نیازی به تبدیل کردن به فیلد  نیست.
خیلی راحت تو متد onActivityResult مقدار uri  رو میدم به متد decodeUri و متد بهم یه Bitmap بر میگردونه منم اون Bitmap رو برای ImageView ست می کنم:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
selectedImage = data.getData();
try {
Bitmap image = decodeUri(this, selectedImage, 1200);
imageView.setImageBitmap(image);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
0 0
دم شما گرم ولی بازم مثل قبل روی عکسهای بزرگ مثل عکس های گرفته شده با دوربین کرش میکنه (11 سال پیش)
پاسخ به سوال 
doost_fu  11 سال پیش
0 0

اینم کدی که تا اینجا بدست اومد
من درست نمی تونم نحوه عملکرد این کد متوجه بشم بازم همون کرش وجود داره

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
int RESULT_LOAD_IMAGE = 1 ;
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
getWindow().setLayout(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Uri selectedImage = data.getData();
try {
Bitmap image = decodeUri(this, selectedImage, 1200);
imgUser.setImageBitmap(image);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
public static Bitmap decodeUri(Context c, Uri uri, final int requiredSize) throws FileNotFoundException {
BitmapFactory.Options options1 = new BitmapFactory.Options();
options1.inJustDecodeBounds = true;
BitmapFactory.decodeStream(c.getContentResolver().openInputStream(uri), null, options1);
int width_tmp = options1.outWidth, height_tmp = options1.outHeight;
int scale = 1;
while(true) {
if(width_tmp / 2 < requiredSize || height_tmp / 2 < requiredSize){
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = scale;
return BitmapFactory.decodeStream(c.getContentResolver().openInputStream(uri), null, options);
}

کد های دیگه ای رو هم تست کردم همه همین مشکل داشتند !!!

+1 0
خواهش میکنم. ولی دیگه نباید کرش کنه :| برا من به همین روش درست شد. مطمئنی خطا از جای دیگه نیست؟ یه عکس با دوربین بگیر بعد تو برنامت از گالری انتخابش کن ببین بازم کرش می کنه. اگه آره خطایی که میده رو بنویس ببینیم چیه. (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .