网上很多人使用这个工具,他的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图片压缩在下一篇文章中介绍