网上不少人使用这个工具,他的API还算清晰,可是真要是找相关文章都是抄袭,我很想fuck下。java
基本都同样啊,根本没有心意。须要本身亲身调试测试才能使用。android
我用的工具是Android studio开发的工具
在android studio中的 build.gradle中增长以下代码测试
/** * 图片裁剪包 */ compile 'com.yalantis:ucrop:2.2.0'
引入所须要的裁剪包gradle
在AndroidManifest.xml配置文件中增长,至于加哪里,本身取研究ui
<activity android:name="com.yalantis.ucrop.UCropActivity" android:screenOrientation="portrait" android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
/** * 调用uCrop工具截图 * @param activity * @param uri */ public static void startCrop(Activity activity,Uri uri){ //裁剪后保存到文件中 Uri sourceUri = uri; SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyyMMddHHmmss"); Date date = new Date(); String imageName = simpleDateFormat.format(date); Uri destinationUri = Uri.fromFile(new File(activity.getCacheDir(), imageName+".jpeg")); UCrop.of(sourceUri, destinationUri).start(activity,PHONE_CODE__CUT); }
这个是调用裁剪工具的方法。this
最最重要的是最后一句spa
UCrop.of(sourceUri, destinationUri).start(activity,PHONE_CODE__CUT);
这个是默认的裁剪样式,能够调出不一样比例的裁剪。固然若是须要头像裁剪或者圆形裁剪的,百度上都有文章,能够参考。我须要的是自由比例裁剪,原生的uCrop就很好用。扯远了,这个方法写在哪里。调试
通常咱们本身写android代码的时候,使用android自带的裁剪功能代码以下:code
/** * 剪切图片 */ private void crop(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪 intent.putExtra("crop", "true"); Bitmap imagebitmap = null; try { imagebitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); } catch (IOException e) { e.printStackTrace(); } int picture_width = imagebitmap.getWidth(); int picture_height = imagebitmap.getHeight(); //若是图片的宽比高要打,那么就用另外一种比例截取不然用另外一种比例 if (picture_width>picture_height) { // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 200); intent.putExtra("aspectY", 120); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 200); intent.putExtra("outputY", 120); }else { // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 5); intent.putExtra("aspectY", 7); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 220); intent.putExtra("outputY", 280); } intent.putExtra("scale", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("return-data", true); startActivityForResult(intent, PHOTO_REQUEST_CUT); }
直接用最后一句
UCrop.of(sourceUri, destinationUri).start(activity,PHONE_CODE__CUT);
替换掉这些代码就能够了。
返回图像处理以下:
//截图完毕 Uri photoUri = UCrop.getOutput(data); File newFile = PhoneUtils.uriToFile(OcrPhotoActivity.this,photoUri); //转换为File //对图片进行压缩转换为Bitmap newCompressedImageBitmap = Compressor.getDefault(this).compressToBitmap(newFile);
这一句很重要 Uri photoUri = UCrop.getOutput(data);
若是不加这一句是得不到返回的数据的。
至于android图片压缩在下一篇文章中介绍