1月 222017
 

android系统中已经存在一个用于裁剪图片的控件,基本参数如下(取自:Android中com.android.camera.action.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:///…,
以下3个属性比较重要:data、MediaStore.EXTRA_OUTPUT以及return-data。
data和MediaStore.EXTRA_OUTPUT都是可选的传入数据选项,你可以选择设置data为Bitmap,或者将相应的数据与URI关联起来,你也可以选择是否返回数据(return-data: true)。
为什么还有不用返回数据的选项?如果对URI足够了解的话,应该知道URI与File相似,你所有的操作如裁剪将数据都保存在了URI中,你已经持有了相应的URI,也就无需多此一举,再返回Bitmap了。
前面已经说到,可以设置data为Bitmap,但是这种操作的限制在于,你的Bitmap不能太大。因此,我们前进的思路似乎明确了:截大图用URI,小图用Bitmap。
用法如下:

intent.setType("image/*"); //这个参数是确定要选择的内容为图片,
intent.putExtra("crop", "true"); //设置了参数,就会调用裁剪,如果不设置,就会跳过裁剪的过程。
intent.putExtra("aspectX", 1); //这个是裁剪时候的 裁剪框的 X 方向的比例。
intent.putExtra("aspectY",1); //同上Y 方向的比例. (注意: aspectX, aspectY ,两个值都需要为 整数,如果有一个为浮点数,就会导致比例失效。)
//设置aspectX 与 aspectY 后,裁剪框会按照所指定的比例出现,放大缩小都不会更改。如果不指定,那么 裁剪框就可以随意调整了。
intent.putExtra("outputX", 100); //返回数据的时候的 X 像素大小。
intent.putExtra("outputY", 100); //返回的时候 Y 的像素大小。
//以上两个值,设置之后会按照两个值生成一个Bitmap, 两个值就是这个bitmap的横向和纵向的像素值,如果裁剪的图像和这个像素值不符合,那么空白部分以黑色填充。
intent.putExtra("noFaceDetection", true); // 是否去除面部检测, 如果你需要特定的比例去裁剪图片,那么这个一定要去掉,因为它会破坏掉特定的比例。
intent.putExtra("return-data", true); //是否要返回值。
startActivityForResult(intent, 1);

有关该控件的用法还可以参考这些文章:
Android调用系统拍照裁剪图片模糊的解决方法
Android 拍照或从相册取图片并裁剪
[Android] 拍照、截图、保存并显示在ImageView控件中
Android 拍照或选择图片并剪裁
Android之图片选择与裁剪
但用这个控件有一个问题,那就是如果系统经过定制(比如我国众多的ROM,如MIUI/Flyme/EMUI),那么无法控制该控件在各种机型上的显示效果,笔者在EMUI上获得的截图框是圆形的(circleCrop参数基本无效,当然,也可能是我参数设置不合适,没深入探究),在MIUI上是矩形。一般情况下,我们都希望控件显示效果是一致的,因此只能自己动手实现了。幸好github上有现成代码,不用重复造轮子,直接拿来用就好,以下推荐我使用过的几个截图控件:
https://github.com/jdamcd/android-crop 代码比较简单,目前star数很高(3281),作者说是修改自从AOSP代码,简单的裁剪图片肯定是够用了(我就是用的这个)
https://github.com/ArthurHub/Android-Image-Cropper 效果不错,可以旋转图片,并集成了其他多种功能,star数也很高(1897),不过我看代码略多,跑了下代码就没细看,不过github wiki上给出了比较详细的使用说明
https://github.com/IsseiAoki/SimpleCropView
https://github.com/lvillani/android-cropimage
https://github.com/biokys/cropimage
https://github.com/edmodo/cropper
Android图片裁剪实现(EnjoyCrop) https://github.com/Zhouztashin/EnjoyCrop
Android实现图片的裁剪(不调用系统功能)
以及这些工程:https://android-arsenal.com/tag/45 ,都可以参考一下:


 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)