是否可以从Google相册裁剪图片?我正在创建的应用程序允许用户选择图像并裁剪它。选择图像时,系统会要求用户选择一个应用程序来完成操作(相册,Google相册等)。从相册中选择和裁剪图像可以很好地工作,但从Google相册中选择一个应用程序会崩溃而不会出现错误。 BBM和WhatsApp等应用允许从照片中裁剪以上传个人资料照片。我想做类似的事情。
这是我的代码:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
Intent i = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, PICK_FROM_FILE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case PICK_FROM_FILE:
mImageCaptureUri = data.getData();
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);
int size = list.size();
if (size == 0) {
Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show();
return;
} else {
intent.setData(mImageCaptureUri);
intent.putExtra("outputX", 650);
intent.putExtra("outputY", 650);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
Intent i = new Intent(intent);
ResolveInfo res = list.get(0);
i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
startActivityForResult(i, CROP_FROM_CAMERA);
}
break;
case CROP_FROM_CAMERA:
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
mImageView.setImageBitmap(photo);
mImageView.setBackgroundColor(0);
}
File f = new File(mImageCaptureUri.getPath());
if (f.exists()) f.delete();
break;
}
}
P.S:这适用于KitKat及更高版本(API19)
答案 0 :(得分:1)
有以下解决方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CROP_PIC_REQUEST_CODE) {
if (data != null) {
Bitmap bitmap = null;
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Bundle extras = data.getExtras();
bitmap = extras.getParcelable("data");
}
else {
Uri uri = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),uri);
} catch (IOException e) {
e.printStackTrace();
}
}
if(bitmap!=null) billImg.setImageBitmap(bitmap);
}
}
}
可能由于在Android 5.0以上版本的Crop函数在 onActivityResult 中返回 URI 而不是位图而导致出现此问题,因此您必须相应地处理ti。
无论如何,我认为最好使用经过优化并处理不同情况的https://github.com/ArthurHub/Android-Image-Cropper之类的库。