網上不少人使用這個工具,他的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圖片壓縮在下一篇文章中介紹