SmartCropper智能图片裁剪框架

联合创作 · 2023-09-25 22:42

SmartCropper 是简单易用的智能图片裁剪库,适用于身份证,名片,文档等照片的裁剪。


支持特性



  • 使用智能算法(基于opencv)识别图片中的边框

  • 支持拖动锚点,手动调节选区,放大镜效果提升定位体验

  • 使用透视变换裁剪并矫正选区,还原正面图片

  • 支持丰富的UI设置,如辅助线,蒙版,锚点,放大镜等


优化智能选区算法(V2.1.1+)


使用机器学习算法代理 Canny 算法,提高识别率(基于 TensorFlow 的 HED 网络). 感谢:https://github.com/fengjian0106/hed-tutorial-for-document-scanning



  1. build.gradle 添加如下代码,不压缩模型:




aaptOptions {
noCompress "tflite"
noCompress "lite"
}


  1. 在合适的地方初始化(比如在 Application.onCreate):




SmartCropper.buildImageDetector(this);

接入


1.根目录下的 build.gradle 添加:




allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}

2.添加依赖




dependencies {
compile 'com.github.pqpo:SmartCropper:v2.1.3'
}

注意:由于使用了 JNI, 请不要混淆




-keep class me.pqpo.smartcropperlib.**{*;}

使用


1. 裁剪布局:




<me.pqpo.smartcropperlib.view.CropImageView
android:id="@+id/iv_crop"
android:layout_width="match_parent"
android:layout_height="match_parent" />

注意: CropImageView 继承至 ImageView,但是 ScaleType 必须为居中类型,如果手动设置成 fit_end,fit_start,matrix 将会报错。


2. 设置待裁剪图片:




ivCrop.setImageToCrop(selectedBitmap);

该方法内部会使用 native 代码智能识别边框,并绘制图片与选区。在 native 层实现,大大的提高了运行效率,运行时间与图片大小成正比,在大图片的情况下,可以考虑在子线程执行,或者压缩传入的图片。


3. 裁剪选区内的图片:




Bitmap crop = ivCrop.crop();

根据选区裁剪出选区内的图片,并使用透视变换矫正成正面图片。


注意:改方法主要逻辑也是位于 native 层,运行时间与图片大小成正比,在大图片的情况下,可以考虑在子线程执行,或者压缩传入的图片。









浏览 40
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报