public static void cropImage(Uri uri, Activity activity, int action_code) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 600);
intent.putExtra("outputY", 600);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
if (intent.resolveActivity(activity.getPackageManager()) != null) {
activity.startActivityForResult(intent, action_code);
} else {
Toast.makeText(activity, "No Crop App Available", Toast.LENGTH_SHORT).show();
}
}
并重写OnActivityResult()
,如下所示:
if (resultCode == Activity.RESULT_OK && requestCode == Utils.CODE_CROP_IMAGE) {
Bundle extras = data.getExtras();
showCenterToast("ccc");
if (extras != null) {
showCenterToast("CCC");
Bitmap photo = extras.getParcelable("data");
ivAvatar.setImageBitmap(photo); // display image in ImageView
FileOutputStream fos = null;
try {
fos = new FileOutputStream(Utils.AVATAR_FILE);
photo.compress(Bitmap.CompressFormat.PNG, 100, fos);// (0-100)compressing file
showCenterToast("DDD");
Utils.AVATAR_FILE_TMP.delete();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
IoUtil.closeSilently(fos);
}
}
}
在Android Pre-Lollipop的设备上,我能够获得位图照片
并将其显示在ImageView
中。但是,在Android Lollipop上,我总是从data.getExtras();
得到null
。
我在谷歌上搜索了很多,但关于在AndroidLollipop上裁剪图像的有用信息很少。
我认为你的问题与Android版本无关,而是你想要裁剪的图像。在类com.android.gallery3d.filtershow.crop.cropActivity#BitmapioTask
中处理的裁剪图像。当图像太大无法返回时,它会尝试返回图像的thumb,有时会返回null。为了避免这种情况,您可以通过设置intent.putextra(纵隔.extra_output,tmpUri);
来获得裁剪图像的uri,而不是位图,其中tmpUri
是为保存结果而创建的uri。然后您可以从tmpuri
中获取位图。
示例代码:
private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp file
private static Uri tmpUri = Uri.parse(IMAGE_FILE_LOCATION);//The Uri to store the big bitmap
public static void cropImage(Uri uri, Activity activity, int action_code) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 600);
intent.putExtra("outputY", 600);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, tmpUri);
if (intent.resolveActivity(activity.getPackageManager()) != null) {
activity.startActivityForResult(intent, action_code);
} else {
Toast.makeText(activity, "No Crop App Available", Toast.LENGTH_SHORT).show();
}
}
并且在函数OnActivityResult中:
if (resultCode == Activity.RESULT_OK && requestCode == Utils.CODE_CROP_IMAGE) {
// Bundle extras = data.getExtras();
Uri uri = data.getData();
showCenterToast("ccc");
if (uri != null) {
showCenterToast("CCC");
// Bitmap photo = null;
// if (tmpUri != null) {
// photo = decodeBitmapFromUri(tmpUri); // Get bitmap from uri.
// }
Bitmap photo = decodeUriAsBitmap(uri);
ivAvatar.setImageBitmap(photo); // display image in ImageView
FileOutputStream fos = null;
try {
fos = new FileOutputStream(Utils.AVATAR_FILE);
photo.compress(Bitmap.CompressFormat.PNG, 100, fos);// (0-100)compressing file
showCenterToast("DDD");
Utils.AVATAR_FILE_TMP.delete();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
IoUtil.closeSilently(fos);
}
} else {
showCenterToast("Uri is NULL");
}
}
private Bitmap decodeUriAsBitmap(Uri uri){
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
return bitmap;
}
问题内容: 我想用PHP裁剪图像并保存文件。我知道您应该使用GD库,但我不确定如何使用。有任何想法吗? 谢谢 问题答案: 您可以用来裁剪图像的必需部分。该命令如下所示: 来自PHP.net的代码- 从源图像中裁剪出一个80x40像素的图像
裁剪是移去部分照片以打造焦点或加强构图效果的过程。在 Photoshop 中使用裁剪工具裁剪并拉直照片。裁剪工具是非破坏性的,您可以选择保留裁剪的像素以便稍后优化裁剪边界。裁剪工具还提供直观的方法,可让您在裁剪时拉直照片。 对于所有操作,可视化指南都提供了交互式预览。在您裁剪或拉直照片时,实时反馈可帮助您以可视的方式呈现最终结果。 裁剪照片 在工具栏中,选择裁剪工具。裁剪边界显示在照片的边缘上。
我试图在从图库中选择图像后使用intent来裁剪图像。以下是我的代码片段 在这里,我使用PICK_IMAGE_REQUEST意图句柄调用上面的代码段 由于我在裁剪后使用了相同的意图,即PICK_IMAGE_REQUEST,可能会出现什么问题
问题内容: 在OpenCV中返回旋转的矩形。如何裁剪矩形内图像的这一部分? 返回旋转矩形的角点的坐标,以便可以通过遍历框内的点来访问像素,但是有没有一种更快的Python裁剪方法? 编辑 请参阅下面的答案。 问题答案: 您没有给出示例代码,所以我也没有代码也回答。您可以按以下步骤进行: 从矩形的角确定相对于水平轴的旋转角度α。 按alpha旋转图像,以使裁剪后的矩形与图像边界平行。确保临时图像的尺
我正在尝试鲁棒地提取轮廓的旋转边界框。我想拍一张图像,找到最大的轮廓,得到它旋转的边界框,旋转图像使边界框垂直,并裁剪到大小。 为了演示,这里有一个原始图像链接在下面的代码中。我想最终把那只鞋旋转到垂直方向,裁剪成合适的尺寸。这个答案中的以下代码似乎适用于opencv行等简单图像,但不适用于照片。 最终得到这个,旋转和裁剪错误: 编辑:将阈值类型更改为,它现在已正确旋转,但裁剪错误: 如何获得正确
我正试图单击image from camera并显示到imageview,但onactivityresult URI返回NULL。但是下面的代码在JellyBean、ICS上运行良好,具有裁剪功能。 呼叫意图