Ici, le code source complet de l'image est extrait de la galerie et capture l'image de camara. ici l'option pour le recadrage de l'image est également disponible .happy coding utilise la méthode selectImageOption() dans laquelle le bouton ou l'image clique même si vous le souhaitez.
private static final int CAMERA_CODE = 101, GALLERY_CODE = 201, CROPING_CODE = 301;
private Uri mImageCaptureUri;
private File outPutFile = null;
String encodedImage = "";
String path = "";
private void selectImageOption() {
final CharSequence[] items = {"Capture Photo", "Choose from Gallery", "Cancel"};
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Select Photo!");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item].equals("Capture Photo")) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp1.jpg");
mImageCaptureUri = Uri.fromFile(f);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
startActivityForResult(intent, CAMERA_CODE);
} else if (items[item].equals("Choose from Gallery")) {
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, GALLERY_CODE);
} else if (items[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); // data = //file:///mnt/sdcard/temp.jpg
if (requestCode == GALLERY_CODE && resultCode == RESULT_OK && null != data) {
mImageCaptureUri = data.getData(); // content://media/external/images/media/116
System.out.println("Gallery Image URI : " + mImageCaptureUri);
//CropingIMG();
onSelectFromGalleryResult(data);
} else if (requestCode == CAMERA_CODE && resultCode == RESULT_OK) {
System.out.println("Camera Image URI : " + mImageCaptureUri);
CropingIMG();
//onCaptureImageResult(data);
} else if (requestCode == CROPING_CODE && resultCode == RESULT_OK) {
try {
if (outPutFile.exists()) {
Bitmap photo = Common.decodeFile(outPutFile);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
byte[] imageBytes = bytes.toByteArray();
encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
img_profile_personal_image.setImageBitmap(photo);
// img_profile_personal_image.setBackgroundColor(Color.TRANSPARENT);
} else {
Toast.makeText(context, "Error while save image", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void onCaptureImageResult(Intent data) {
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 50, bytes);
byte[] imageBytes = bytes.toByteArray();
encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
File destination = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpeg");
FileOutputStream fo;
try {
destination.createNewFile();
fo = new FileOutputStream(destination);
fo.write(bytes.toByteArray());
fo.flush();
fo.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//Uri tempUri = getImageUri(mContext, thumbnail);
path = destination.getAbsolutePath();
if (new File(path).exists()) {
//Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG).show();
}
ivUserPic.setImageBitmap(thumbnail);
}
private void onSelectFromGalleryResult(Intent data) {
Bitmap bm = null;
if (data != null) {
try {
bm = Common.getCorrectlyOrientedImage(context, data.getData());
Uri fileUri = data.getData();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
path = getPath(getActivity().getApplicationContext(), fileUri);
}
File file = new File(path);
if (file.exists()) {
Toast.makeText(mContext, "File " + file.getAbsolutePath(), Toast.LENGTH_LONG).show();
}
Log.d("", "Video URI= " + fileUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
byte[] imageBytes = bytes.toByteArray();
encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
ivUserPic.setImageBitmap(bm);
}
}
private void CropingIMG() {
final ArrayList<CropingOption> cropOptions = new ArrayList<CropingOption>();
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent, 0);
int size = list.size();
if (size == 0) {
Toast.makeText(context, "Cann't find image croping app", Toast.LENGTH_SHORT).show();
return;
} else {
intent.setData(mImageCaptureUri);
intent.putExtra("outputX", 512);
intent.putExtra("outputY", 512);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
//Create output file here
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outPutFile)); // "/mnt/sdcard/temp.jpg"
if (size == 1) {
Intent i = new Intent(intent);
ResolveInfo res = (ResolveInfo) list.get(0);
i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
startActivityForResult(i, CROPING_CODE);
} else {
for (ResolveInfo res : list) {
final CropingOption co = new CropingOption();
co.title = getActivity().getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo);
co.icon = getActivity().getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo);
co.appIntent = new Intent(intent);
co.appIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
cropOptions.add(co);
}
CropingOptionAdapter adapter = new CropingOptionAdapter(context, cropOptions);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose Croping App");
builder.setCancelable(false);
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
startActivityForResult(cropOptions.get(item).appIntent, CROPING_CODE);
}
});
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
if (mImageCaptureUri != null) {
context.getContentResolver().delete(mImageCaptureUri, null, null);
mImageCaptureUri = null;
}
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
}
Comman.java
public static Bitmap getCorrectlyOrientedImage(Context context, Uri photoUri) throws IOException {
InputStream is = context.getContentResolver().openInputStream(photoUri);
BitmapFactory.Options dbo = new BitmapFactory.Options();
dbo.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, dbo);
is.close();
int rotatedWidth, rotatedHeight;
int orientation = getOrientation(context, photoUri);
if (orientation == 90 || orientation == 270) {
rotatedWidth = dbo.outHeight;
rotatedHeight = dbo.outWidth;
} else {
rotatedWidth = dbo.outWidth;
rotatedHeight = dbo.outHeight;
}
Bitmap srcBitmap;
int MAX_IMAGE_WIDTH = 1024;
int MAX_IMAGE_HEIGHT = 1024;
is = context.getContentResolver().openInputStream(photoUri);
if (rotatedWidth > MAX_IMAGE_WIDTH || rotatedHeight > MAX_IMAGE_HEIGHT) {
float widthRatio = ((float) rotatedWidth)/((float) MAX_IMAGE_WIDTH);
float heightRatio = ((float) rotatedHeight)/((float) MAX_IMAGE_HEIGHT);
float maxRatio = Math.max(widthRatio, heightRatio);
// Create the bitmap from file
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = (int) maxRatio;
srcBitmap = BitmapFactory.decodeStream(is, null, options);
} else {
srcBitmap = BitmapFactory.decodeStream(is);
}
is.close();
/*
* if the orientation is not 0 (or -1, which means we don't know), we
* have to do a rotation.
*/
if (orientation > 0) {
Matrix matrix = new Matrix();
matrix.postRotate(orientation);
srcBitmap = Bitmap.createBitmap(srcBitmap, 0, 0, srcBitmap.getWidth(),
srcBitmap.getHeight(), matrix, true);
}
return srcBitmap;
}
c'est le chemin que j'obtiens pour l'image de la caméra: file: ///storage/emulated/0/Pictures/PhysiotherapyProfileImage/Profile.jpg.Ceci est le chemin que j'obtiens pour l'image de la galerie: file: /// storage/emulated /0/Pictures/PhysiotherapyProfileImage/Profile.jpg .. besoin d'obtenir filepath pour la galerie similaire à la caméra – Abhinay
@Abhinay vous pouvez créer un nouveau fichier jpg à partir de bitmap sur le stockage externe. Et utilisez ce chemin pour la prochaine étape. Fichier f = nouveau Fichier (context.getCacheDir(), nom de fichier); f.createNewFile(); // Conversion de bitmap en tableau d'octets Bitmap bitmap = votre bitmap; ByteArrayOutputStream bos = new ByteArrayOutputStream(); BitRecords (CompressFormat.PNG, 0/* ignoré pour PNG * /, bos); octet [] bitmapdata = bos.toByteArray(); // écrire les octets dans le fichier FileOutputStream fos.write (bitmapdata); fos.flush(); fos.close(); – mandeepsinghn