Android Studio中使用uCrop裁剪工具

網上不少人使用這個工具,他的API還算清晰,可是真要是找相關文章都是抄襲,我很想fuck下。java

基本都同樣啊,根本沒有心意。須要本身親身調試測試才能使用。android

我用的工具是Android studio開發的工具

  • 首先,引入uCrop包

        在android studio中的 build.gradle中增長以下代碼測試

        

/**
 *  圖片裁剪包
 */
compile 'com.yalantis:ucrop:2.2.0'

    引入所須要的裁剪包gradle

  • 配置,AndroidManifest.xml文件

在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圖片壓縮在下一篇文章中介紹

相關文章
相關標籤/搜索