# uCrop_ohos **Repository Path**: isrc_ohos/u-crop_ohos ## Basic Information - **Project Name**: uCrop_ohos - **Description**: uCrop是目前较火的图片裁剪框架,具有封装程度高、使用流畅、自定义自由度高的优点。目前已经有许多安卓APP选用它作为图像裁剪的模块。本组件是uCrop的鸿蒙化版本,继承了其大部分优点。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 13 - **Forks**: 4 - **Created**: 2021-02-04 - **Last Updated**: 2025-02-19 ## Categories & Tags **Categories**: harmonyos-image **Tags**: HarmonyComponent ## README # uCrop_ohos **本项目是基于开源项目uCrop进行鸿蒙化的移植和开发的,可以通过项目标签以及github地址( https://github.com/Yalantis/uCrop )追踪到原安卓项目版本,该项目已在社区发表文章可以通过( https://harmonyos.51cto.com/posts/3773 )查看相应资源。** #### 项目介绍 - 项目名称:开源图像裁剪软件 - 所属系列:鸿蒙的第三方组件适配移植 - 功能:支持各种格式图片的裁剪 - 项目移植状态:基本功能实现 - 调用差异:有(见使用教程) - 开发版本:sdk5,DevEco Studio2.1 beta3 - 项目发起作者:吴圣垚 - 邮箱:isrc_hm@iscas.ac.cn - 原项目Doc地址:https://github.com/Yalantis/uCrop ![输入图片说明](https://images.gitee.com/uploads/images/2021/0317/093907_77f0cded_8496150.jpeg "sample1.jpg") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0317/093916_dfb528c9_8496150.png "sample2.PNG") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0317/093922_244b93ec_8496150.png "sample3.PNG") #### 项目介绍 - 编程语言:Java - 外部库依赖:com.squareup.okhttp3:okhttp:3.12.1 #### 安装教程 (若虚拟机无图库可能出现白屏,配置证书后在真机运行) 1. 下载本组件har包uCrop.har。 2. 启动 DevEco Studio,将下载的har包,导入工程目录“entry->libs”下。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0309/200208_421692ff_8496150.png "1.PNG") 3. 在moudle级别下的build.gradle文件中添加依赖,在dependences字段中增加对libs目录下har包的引用,并且添加okhttp的相关依赖,然后执行gradle sync。 ```groovy dependencies { implementation fileTree(dir: 'libs', include: ['*.har']) implementation "com.squareup.okhttp3:okhttp:3.12.1" …… } ``` #### 使用教程(可以参考本工程的entry模块) 1. 选择待裁剪图片,获取其Uri ```java //网图URI Uri uri_i = Uri.parse("https://gimg2.baidu.com/image_search/src=http%3A%2F%2F2e.zol-img.com.cn%2Fproduct%2F56%2F456%2Fce88hkGbFnV8Y.jpg&refer=http%3A%2F%2F2e.zol-img.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617791968&t=8e9676cb3c0536d46830d1090ad970f4"); ``` 2. 创建本地Uri,用于存储待裁剪的图片 ```java //本地URI String filename = "test.jpg"; PixelMap.InitializationOptions options = new PixelMap.InitializationOptions(); options.size = new Size(100,100); PixelMap pixelmap = PixelMap.create(options); Uri uri_o = saveImage(filename, pixelmap); ``` 关于saveImage的写法,可以参考entry模块中的代码。 3. 使用两个Uri初始化UcropView,这样图片就会被加载到UcropView中。UcropView已经原生支持手势对其进行平移、缩放和旋转。 ```java UcropView uCropView = new UCropView(this); try { uCropView.getCropImageView().setImageUri(uri_i, uri_o); uCropView.getOverlayView().setShowCropFrame(true); uCropView.getOverlayView().setShowCropGrid(true); uCropView.getOverlayView().setDimmedColor(Color.BLACK.getValue()); } catch (Exception e) { e.printStackTrace(); } ``` 4. 添加裁剪按钮,点击按钮后即可裁剪并保存图片。 ``` //裁剪Button Button button = new Button(this); button.setText("裁剪"); button.setTextSize(100); button.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { cropAndSaveImage(); component.setVisibility(Component.INVISIBLE); } }); protected void cropAndSaveImage() { mGestureCropImageView = uCropView.getCropImageView(); mGestureCropImageView.cropAndSaveImage("image/jpg", 90, null); } ``` 5. Run!可以使用手势对图片进行调整和裁剪。裁剪好的图片会保存在相册里。不必担心裁剪框超出图像带来的一系列问题,本组件会自动适配它们。 6. (可选)使用封装好的接口对图片执行缩放、平移、旋转和裁剪。可以将它们放在按钮、滚动条中实现对应的效果。 ```java //缩放 uCropView.getCropImageView().postScale(factor,center_X,center_Y); //平移 uCropView.getCropImageView().postTranslate(distance_X, distance_Y); //旋转 uCropView.getCropImageView().postRotate(degrees,center_X,center_Y); ``` #### 版本迭代 - v0.1.0-alpha 实现了组件的基本功能 尚不支持使用手势对图像进行旋转操作 尚不支持动画效果 - v0.2.0-alpha 修复了旋转后裁剪会出现【裁剪预览】与【实际裁剪后的图片】不一致的问题 现已支持使用手势对图像进行旋转操作 - v0.3.0-alpha 添加了读取本地文件的能力 在sample中添加了读取本地相册的代码 #### 已知的问题: 1.缩放listener在滑动操作后触发不灵敏 2.裁剪框无法设置为半透明色 #### 版权和许可信息 - uCrop_ohos经过[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0)授权许可。