android系统图片裁减
xta Options Table for image/* crop:
附加选项 数据类型 描述
crop String 发送裁剪信号
aspectX int X方向上的比例
aspectY int Y方向上的比例
outputX int 裁剪区的宽
outputY int 裁剪区的高
scale boolean 是否保留比例
return-data boolean 是否将数据保留在Bitmap中返回
data Parcelable 相应的Bitmap数据
circleCrop String 圆形裁剪区域?
MediaStore.EXTRA_OUTPUT (“output”) URI 将URI指向相应的file:///…,详见代码示例
// 开始return-data设置了true的话直接返回bitmap,可能会很占内存
intent.putExtra(“return-data”, true);
这样返回的bitmap是还存在内存中的缩略图,所以很模糊,后来改为把剪切的图片保存起来不直接返回bitmap一切就OK了
private Uri imageUri;
private static final String IMAGE_FILE_LOCATION = Constants.ALBUM_PATH+"/temp.jpg";
imageUri = Uri.fromFile(new File(IMAGE_FILE_LOCATION));
// 剪切图片
private void crop(Uri uri) {
// 裁剪图片意图
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// 裁剪框的比例,1.5:1
intent.putExtra("aspectX", 16);
intent.putExtra("aspectY", 9);
// 裁剪后输出图片的尺寸大小
intent.putExtra("outputX", 800);
intent.putExtra("outputY", 450);
// intent.putExtra("outputFormat", "JPEG");// 图片格式
//intent.putExtra("noFaceDetection", true);// 取消人脸识别
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(intent, SELECT_PIC_BY_CUT_PHOTO);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case SELECT_PIC_BY_CUT_PHOTO:
// 从剪切图片返回的数据
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
if (imageUri != null) {
Bitmap bitmap = ImageUtils.decodeUriAsBitmap(getActivity(), imageUri);
// 把解析到的位图显示出来
advanceDialog.setPic(bitmap);
advanceDialog.dismissPicDialog();
String imageurl = Constants.ALBUM_PATH;
saveMyBitmap(imageurl, bitmap);
}
}
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
private Bitmap decodeUriAsBitmap(Uri uri) {
Bitmap bitmap = null;
try {
// 先通过getContentResolver方法获得一个ContentResolver实例,
// 调用openInputStream(Uri)方法获得uri关联的数据流stream
// 把上一步获得的数据流解析成为bitmap
bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(uri));
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
return bitmap;
}