安卓如何像CamScanner一样裁剪图片

15

我正在开发一个项目,需要像CamScanner安卓应用程序一样的图片裁剪功能。当用户拍照并单击裁剪按钮时,应显示一个矩形覆盖层,就像CamScanner一样。矩形路径可以延伸到任意角度并执行裁剪。请帮助我找到解决方案。

我参考了https://github.com/edmodo/cropper,但它只能提供包含4个点的矩形覆盖层。如果有任何人有链接或解决方案,请帮助我!


你找到任何解决方案了吗? - Mehul Joisar
2个回答

43

我有一个类似的需求,但没有找到类似 CamScanner 的具体解决方案,所以我接受了挑战,并实现了一个扫描库(基于 OpenCV,丰富的图像处理库),类似于 CamScanner,可以轻松集成到现有应用程序中。使用该库,您将能够选择任何角度的确切边缘并从选定的 4 个边缘裁剪文档,以及更改已裁剪图像的透视变换。

Android ScanLibrary 的 Github 链接:https://github.com/jhansireddy/AndroidScannerDemo

enter image description here


1
在裁剪多边形表面时,边缘没有被自动检测到,你能帮我修复一下吗? - Karthik
1
这个库的主要问题是图像方向总是旋转了90度。第二个问题是它缺乏自动边缘检测。 - Raptor
这是目前为止这种事情最好的免费开源库。感谢您的贡献。 - Vulovic Vukasin
太好了!非常感谢你。顺便问一下,有人知道一个在iOS上能用的类似库吗? - Jiechao Li
@Raptor 它确实具有自动边缘检测功能,虽然不是非常强大,但对我来说图像效果很好,此外旋转位图只需要三行代码。 - Saravanabalagi Ramachandran
显示剩余10条评论

1

感谢@jhansi提供了这个惊人的库,但这个库(Android Scanner Library)的问题是图像方向总是旋转90度,我们可以这样解决。

Kotlin解决方案

在OnActivityResult中,它会给你一个位图,然后你可以将此位图传递给"Bitmap.roate"方法。

像这样使用它:val rotatedBitmap=bitmap.rotate(90f) imageView.setImageBitmap(rotatedBitmap)

将此方法粘贴到您的活动中: fun Bitmap.rotate(degrees: Float): Bitmap { val matrix = Matrix().apply { postRotate(degrees) } return Bitmap.createBitmap(this, 0, 0, width, height, matrix, true) }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接