android使用ucrop实现头像裁剪,图片裁剪的使用

编程入门 行业动态 更新时间:2024-10-06 14:25:44

android使用ucrop实现<a href=https://www.elefans.com/category/jswz/34/1766089.html style=头像裁剪,图片裁剪的使用"/>

android使用ucrop实现头像裁剪,图片裁剪的使用

github地址  

uCrop 支持缩放图片,旋转图片,改变裁剪长宽比例,支持出手势:一根指头滑动图片,两根指头旋转图片,捏拉缩放,双击缩放。等功能。对于裁剪头像的需求基本满足。

下面记录在学习头像裁剪的笔记,以及一个上传到git的demo。

1、依赖添加

//项目中的build.gradle
allprojects {repositories {google()jcenter()maven { url "" }}
}//App中的build.gradle
compile 'com.github.yalantis:ucrop:2.2.1'

2、权限申请(android6.0及以上需要动态申请权限,我在其他博客中也写过这么不再贴,可以在github中查看)

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!--允许读取手机状态--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.FLASHLIGHT" /><uses-permission android:name="android.permission.VIBRATE" />

3、开始写代码

3.1 在androidmanifest.xml中注册裁剪图片的activity

<!--android:screenOrientation="portrait"表示竖屏-->
<activityandroid:name="com.yalantis.ucrop.UCropActivity"android:screenOrientation="portrait"android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

3.2 图片有两种方式获取,从图库选择,或者拍照

/*** 从相册选择图片** @param activity*/public static void choosePhoto(Activity activity) {Intent intent = new Intent();intent.setType("image/*");intent.setAction(Intent.ACTION_PICK);//打开图库//REQUEST_PICTURE_CHOOSE表示请求参数,是个常量activity.startActivityForResult(intent, REQUEST_PICTURE_CHOOSE);}/*** 打开相机拍照** @param activity* @return*/public static void openCamera(Activity activity) {//CROPIMAGEROOT是我为app建立的一个根目录文件夹,//定义方式://private final static String CROPIMAGEROOT = Environment.getExternalStorageDirectory() + "/myAppName/";//当然这个目录需要自己创建,可以下载demo查看//mPictureFile 拍照后图片保存的文件。mPictureFile = new File(CROPIMAGEROOT, "_" + System.currentTimeMillis() + ".jpg");imageUri = Uri.fromFile(mPictureFile);// 启动拍照,并保存到临时文件Intent mIntent = new Intent();mIntent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);mIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mPictureFile));mIntent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);activity.startActivityForResult(mIntent, REQUEST_CAMERA_IMAGE);}

其中注释已经横清楚了

 

3.3选择图片后在 ActivityforResult()中调用裁剪图片的方法,裁剪完后,还是在 ActivityforResult()对裁剪后的结果进行处理。

这里直接贴出整个ActivityforResult()

    @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode) {//相册case REQUEST_PICTURE_CHOOSE:if (resultCode == RESULT_OK) {Uri sourceUri = data.getData();startUCrop(sourceUri);} else {Toast.makeText(this, "选图失败!", Toast.LENGTH_SHORT).show();}break;//照相case REQUEST_CAMERA_IMAGE:if (resultCode == RESULT_OK) {if (data != null) {startUCrop(imageUri);} else {Toast.makeText(this, "拍照失败!", Toast.LENGTH_SHORT).show();}}break;//裁剪后的效果case UCrop.REQUEST_CROP:if (resultCode == RESULT_OK) {Uri resultUri = UCrop.getOutput(data);try {Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(resultUri));avatarImage.setImageBitmap(bitmap);} catch (FileNotFoundException e) {e.printStackTrace();}}break;//错误裁剪的结果case UCrop.RESULT_ERROR:if (resultCode == RESULT_OK) {final Throwable cropError = UCrop.getError(data);handleCropError(cropError);}break;}}

3.4 实现图片裁剪的函数

     /*** 裁剪图片** @param sourceUri*/private void startUCrop(Uri sourceUri) {UCrop.Options options = new UCrop.Options();//裁剪后图片保存在文件夹中Uri destinationUri = Uri.fromFile(new File(CROPIMAGEROOT, "uCrop.jpg"));UCrop uCrop = UCrop.of(sourceUri, destinationUri);//第一个参数是裁剪前的uri,第二个参数是裁剪后的uriuCrop.withAspectRatio(1, 1);//设置裁剪框的宽高比例//下面参数分别是缩放,旋转,裁剪框的比例options.setAllowedGestures(com.yalantis.ucrop.UCropActivity.ALL, com.yalantis.ucrop.UCropActivity.NONE, com.yalantis.ucrop.UCropActivity.ALL);options.setToolbarTitle("移动和缩放");//设置标题栏文字options.setCropGridStrokeWidth(2);//设置裁剪网格线的宽度(我这网格设置不显示,所以没效果)//options.setCropFrameStrokeWidth(1);//设置裁剪框的宽度options.setMaxScaleMultiplier(3);//设置最大缩放比例//options.setHideBottomControls(true);//隐藏下边控制栏options.setShowCropGrid(true);  //设置是否显示裁剪网格//options.setOvalDimmedLayer(true);//设置是否为圆形裁剪框options.setShowCropFrame(true); //设置是否显示裁剪边框(true为方形边框)options.setToolbarWidgetColor(Color.parseColor("#ffffff"));//标题字的颜色以及按钮颜色options.setDimmedLayerColor(Color.parseColor("#AA000000"));//设置裁剪外颜色options.setToolbarColor(Color.parseColor("#000000")); // 设置标题栏颜色options.setStatusBarColor(Color.parseColor("#000000"));//设置状态栏颜色options.setCropGridColor(Color.parseColor("#ffffff"));//设置裁剪网格的颜色options.setCropFrameColor(Color.parseColor("#ffffff"));//设置裁剪框的颜色uCrop.withOptions(options);/*//裁剪后保存到文件中Uri destinationUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/myxmpp/" + "test1.jpg"));UCrop uCrop = UCrop.of(sourceUri, destinationUri);UCrop.Options options = new UCrop.Options();//设置裁剪图片可操作的手势options.setAllowedGestures(UCropActivity.SCALE, UCropActivity.ROTATE, UCropActivity.ALL);//设置toolbar颜色options.setToolbarColor(ActivityCompat.getColor(this, R.color.orange2));//设置状态栏颜色options.setStatusBarColor(ActivityCompat.getColor(this, R.color.orange2));//是否能调整裁剪框options.setFreeStyleCropEnabled(true);options.setToolbarWidgetColor(Color.parseColor("#ffffff"));//标题字的颜色以及按钮颜色options.setDimmedLayerColor(Color.parseColor("#AA000000"));//设置裁剪外颜色options.setToolbarColor(Color.parseColor("#000000")); // 设置标题栏颜色options.setStatusBarColor(Color.parseColor("#000000"));//设置状态栏颜色options.setCropGridColor(Color.parseColor("#ffffff"));//设置裁剪网格的颜色options.setCropFrameColor(Color.parseColor("#ffffff"));//设置裁剪框的颜色//options.setShowCropFrame(false); //设置是否显示裁剪边框(true为方形边框)uCrop.withOptions(options);*/uCrop.start(this);}

实现裁剪可以定制不同的功能,注释写的很清楚,这里不再赘述。可以自己修改,慢慢查看运行效果。

其中UCrop uCrop = UCrop.of(sourceUri, destinationUri);//第一个参数是裁剪前的uri,第二个参数是裁剪后的uri。

完成裁剪之后,在ActivityforResult()中将图片显示在某个imageView中。

 

这个好像不支持圆形图片的裁剪。稍后将介绍另一种库实现圆形图片的裁剪

github地址  

更多推荐

android使用ucrop实现头像裁剪,图片裁剪的使用

本文发布于:2024-02-19 16:42:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764948.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:头像   图片   android   ucrop

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!