Android 从 Intent 获取裁剪图像的 URI
Posted
技术标签:
【中文标题】Android 从 Intent 获取裁剪图像的 URI【英文标题】:Android get URI of cropped image from Intent 【发布时间】:2017-02-05 12:04:47 【问题描述】:我正在尝试从 android 相机捕获图像/从图库中选择图像,然后在对其执行其他操作之前对其进行裁剪。我无法取回裁剪图像的 URI。任何有关如何在图像被裁剪后取回图像 URI 的帮助将不胜感激!
下面的代码与我的 onActivityResult 和我执行裁剪的函数有关
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK)
if (requestCode == SELECT_FILE || requestCode == REQUEST_IMAGE_CAPTURE)
if(!IS_CAMERA_USED)
selectedImageUri = data.getData();
performCrop();
else if(requestCode == CROP_IMAGE)
selectedImageUri = data.getData();
onSelectedImageResult();
public void performCrop()
// take care of exceptions
Display display = getWindowManager().getDefaultDisplay();
try
// call the standard crop action intent (the user device may not
// support it)
Intent cropIntent = new Intent("com.android.camera.action.CROP");
// indicate image type and Uri
cropIntent.setDataAndType(selectedImageUri, "image/*");
// set crop properties
cropIntent.putExtra("crop", "true");
// indicate aspect of desired crop
cropIntent.putExtra("aspectY", 1);
if(IS_PROFILE_PICTURE)
cropIntent.putExtra("aspectX", 1);
else
cropIntent.putExtra("aspectX", 2);
// indicate output X and Y
cropIntent.putExtra("outputX", display.getWidth());
cropIntent.putExtra("outputY", display.getHeight());
// retrieve data on return
cropIntent.putExtra("return-data", true);
// start the activity - we handle returning in onActivityResult
startActivityForResult(cropIntent, CROP_IMAGE);
// respond to users whose devices do not support the crop action
catch (ActivityNotFoundException anfe)
Toast toast = Toast
.makeText(this, "This device doesn't support the crop action!", Toast.LENGTH_SHORT);
toast.show();
问题在于selectedImageUri = data.getData()
行,其中data.getData()
在完成裁剪后返回null。如何取回裁剪图像的 URI?我不想得到data.getExtras.getParcelable("data")
,因为它会返回缩略图并破坏图像分辨率。
提前致谢!
【问题讨论】:
Android does not have aCROP
Intent
。有很多image cropping libraries available for Android。请使用一个。
【参考方案1】:
您可以使用以下代码获取图像位图:
if (requestCode == CROP_IMAGE)
if (data != null)
Bundle extras = data.getExtras();
if (extras != null)
Bitmap selectedBitmap = extras.getParcelable("data");
//imgView.setImageBitmap(selectedBitmap);
我认为 URI 是不可能的,因为裁剪后的图像没有保存在存储中。
【讨论】:
【参考方案2】:感谢您的所有回答,但我发现了一些更易于合并和使用的方法,可以避免由于 `com.android.camera.action.CROP' 类引起的所有麻烦,可以在here
【讨论】:
【参考方案3】:我认为您应该将裁剪后的 Bitmap 保存到存储中,然后使用裁剪后的 Bitmap 的 URI 对其执行某些操作! 我知道这不是一项专业的工作,但至少应该这样做
【讨论】:
以上是关于Android 从 Intent 获取裁剪图像的 URI的主要内容,如果未能解决你的问题,请参考以下文章