//打开系统图片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, FromAlbum);
// onActivityResult 中
if (requestCode == FromAlbum) {
Uri uri = data.getData(); //图片 地址 uri
startPhotoZoom(uri);
} else if (requestCode == FromCrop) {
String cropPath = new DataHandler(this).getDir() + "/userImage/" + phone + ".jpg";
new DataHandler(UpdateUserInfoActivity.this).compressImage(cropPath,cropPath,100,100);
if (new File(cropPath).exists()) {
Bitmap bitmap = BitmapFactory.decodeFile(cropPath);
imageView.setImageBitmap(bitmap);
}
}
/**
* 裁剪原始的图片
*/
public void startPhotoZoom(Uri uri) {
Log.i("tag", "startPhotoZoom");
String cropPath = new DataHandler(this).getDir() + "/userImage/" + phone + ".jpg";
File cropPhoto = new File(cropPath);
try {
if (!cropPhoto.getParentFile().exists()) {
cropPhoto.getParentFile().mkdir();
}
if (cropPhoto.exists()) {
cropPhoto.delete();
}
cropPhoto.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
Uri cropImageUri = new DataHandler(this).getUri(cropPath);
//
Intent intent = new Intent("com.android.camera.action.CROP");//调用系统裁剪的Action
intent.setDataAndType(uri, "image/*");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加这一句表示对目标应用临时授权该Uri所代表的文件
}
// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
intent.putExtra("scale", true);
intent.putExtra("scaleUpIfNeeded", true);// 去黑边
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//输出的宽高
intent.putExtra("outputX", 300);
intent.putExtra("outputY", 300);
intent.putExtra("return-data", false); //设置为不返回数据
intent.putExtra("noFaceDetection", true); // 头像识别
intent.putExtra(MediaStore.EXTRA_OUTPUT, cropImageUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
//重要的一步,使用grantUriPermission来给对应的包提升读写指定uri的临时权限。否则即使调用成功,也会保存裁剪照片失败。
List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
grantUriPermission(packageName, cropImageUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
startActivityForResult(intent, FromCrop);
}