android 裁剪图片

//打开系统图片
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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值