Android中(图片裁剪)问题处理

系统自带的图片裁剪功能填坑

使用

  • 1
    Intent intent = new Intent(“com.android.camera.action.CROP”);
    使用这么一个意图,就能将需要裁剪的图片设置进去,并进行裁剪,下面 看下这个意图的具体用法:
  • 2

Exta 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:///…,

    Intent intent = new Intent("com.android.camera.action.CROP");  
    intent.setDataAndType(uri, "image/*");//uri为图片的uri <br/> 
    // crop为true是设置在开启的intent中设置显示的view可以剪裁  
    intent.putExtra("crop", "true");  

    // aspectX aspectY 是宽高的比例  
    intent.putExtra("aspectX", 1);  
    intent.putExtra("aspectY", 1);  

    // outputX,outputY 是剪裁图片的宽高  
    intent.putExtra("outputX", 360);  
    intent.putExtra("outputY", 360);  
    intent.putExtra("return-data", true)

    startActivityForResult(intent, SET_PIC);

这样就可以在当前的activity的onActivityResult方法中获取到裁剪后的图片.

  • 3

遇坑

在不同的rom上,有的手机会直接闪退(连报错信息都没有),经过排查得知是部分手机限制了 返回bitmap的大小引起的问题.

  • 4 解决

裁剪后,保存图片到本地,并保存资源路径Uri,在onActivityResult()方法中,再提取对应的Uri图片资源转换为Bitmap使用。

        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(data, "image/*");
        intent.putExtra("crop", true);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("outputX", 360);
        intent.putExtra("outputY", 360);



        tempPhotoUri = Uri.parse("file://" + "/"+ tempHeadFile);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, tempPhotoUri);
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
        startActivityForResult(intent, SET_PIC);

之后在onActivityResult中 使用:

Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(tempPhotoUri));
获取到图片的bitmap,并将临时文件删除FileUtil.deleteFileSafely(tempHeadFile);

展开阅读全文

没有更多推荐了,返回首页