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图片压缩在下一篇文章中介绍

相关文章
相关标签/搜索