滤镜
滤镜;主要是用来实现图像的各种特殊效果。它在Photoshop中具有非常神奇的作用。滤镜通常需要同通道、图层等联合使用,才能取得最佳艺术效果。
在移动端或者在web开发时处理图片都是一件麻烦的事儿。我调研过很多library,特别是在移动端处理图片时动不动都需要使用 C++ 或者 OpenCV。这对于 Java 程序员来说,具有很高的门槛。甚至在调试时,遇到错误都会无法下手进行处理。其实,随着手机设备性能的不断提高,使用 Java 同样能完成这些事情。
实现
这是原图,可以选择滤镜来美化图片。
原图.png
这是几种滤镜的效果
滤镜效果.jpg
首先,我们的库叫 cv4j,cv 是 Computer Vision 的意思,同时也用于致敬 OpenCV。
https://github.com/imageprocessor/cv4j
以SepiaTone滤镜为例,我们自己私下叫它怀旧风格的滤镜
SepiaTone.png
ImageData是我们自己定义的图像数据结构。所有的滤镜都是通过ImageData来传递。
ImageData是一个接口,目前它的实现类只有ColorImage。
所以使用一个滤镜,通常只要这样写的就ok了。
性能是我们一直关心的话题,我在模拟器上跑了demo app,通过 AOP 的方法打印了 demo app 中一些滤镜在使用时花费的时间。
滤镜花费的时间.jpeg
在demo app中,滤镜实例化是借助Class.forName()肯定比直接使用new 某个滤镜类要慢一些。
滤镜实例化使用Class.forName.jpeg
总结
cv4j 是贾志刚和我一起开发的图像处理库,目前还处于很早期的版本。我们每天都会对这个库做一些提交。整个库在架构上和图像算法上都还有很大的提升空间。
本文同步分享在 博客“fengzhizi715”(JianShu)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。