Android Studio中使用uCrop裁剪工具

网上很多人使用这个工具,他的API还算清晰,但是真要是找相关文章都是抄袭,我很想fuck下。

基本都一样啊,根本没有心意。需要自己亲身调试测试才能使用。

我用的工具是Android studio开发的

  • 首先,引入uCrop包

        在android studio中的 build.gradle中增加如下代码

        

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

    引入所需要的裁剪包

  • 配置,AndroidManifest.xml文件

在AndroidManifest.xml配置文件中增加,至于加哪里,自己取研究

<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);
    }

这个是调用裁剪工具的方法。

最最重要的是最后一句

UCrop.of(sourceUri, destinationUri).start(activity,PHONE_CODE__CUT);

这个是默认的裁剪样式,可以调出不同比例的裁剪。当然如果需要头像裁剪或者圆形裁剪的,百度上都有文章,可以参考。我需要的是自由比例裁剪,原生的uCrop就很好用。扯远了,这个方法写在哪里。

一般我们自己写android代码的时候,使用android自带的裁剪功能代码如下:

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

转载于:https://my.oschina.net/u/1399599/blog/853374

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值