Android非常全的图片处理库

73 阅读4分钟

简介

该项目是我自己在华为应用商城上架过App(调色编辑大师)的核心模块,应用内的所有核心功能都在该模块中,现在打算直接把项目核心代码分享出来。有兴趣的可以直接下载商城中的应用看看,商城中的应用里面存在的功能在该项目中都会存在,不过因为商城中的智能蒙层用的是华为的AI技术,就没有加入该项目中。

链接

项目Demo图片

项目功能

项目功能

bitmap为处理图片,bitmapMask为蒙层

  • LUT相机:CameraActivity.start(Context context)
  • 图片像素化:OpenCvIn.makeBitmapToPixel(bitmap,bitmapMask,5)
  • 图片反色:OpenCvIn.makeBitmapColorCounter(bitmap)
  • 图片去雾:OpenCvIn.makeBitmapRemoveFog(bitmap,bitmapMask,0.5f)
  • 图片灰度:OpenCvIn.makeBitmapGray(bitmap)
  • 图片高斯:OpenCvIn.makeBitmapBlur(bitmap,bitmapMask,10)
  • 图片颗粒化:OpenCvIn.makeBitmapParticles(bitmap,bitmapMask,10)
  • 图片黑白化:OpenCvIn.makeBitmapWhiteAndBlack(bitmap)
  • 图片怀旧:OpenCvIn.makeBitmapNostalgia(bitmap)
  • 图片熔铸:OpenCvIn.makeBitmapFounding(bitmap)
  • 图片冻结:OpenCvIn.makeBitmapFrozen(bitmap)
  • 图片描边:OpenCvIn.makeBitmapEdge(bitmap)
  • 图片膨胀:OpenCvIn.makeBitmapDilate(bitmap)
  • 图片连环画:OpenCvIn.makeBitmapComics(bitmap)
  • 图片侵蚀:OpenCvIn.makeBitmapErode(bitmap)
  • 图片水平翻转:OpenCvIn.getRotationXY(bitmap,true)
  • 图片垂直翻转:OpenCvIn.getRotationXY(bitmap,false)
  • 图片尺寸:OpenCvIn.imageResize(bitmap,0.4,0.4)
  • 图片LUT滤镜:OpenCvIn.makeBitmapChangeByLut(bitmap,lutFilePath)
  • 图片USM锐化:OpenCvIn.usmFilter(bitmap,bitmapMask,0,0,0)
  • 通道混合器:OpenCvIn.mixColorChannel(bitmap,bitmapMask,MixColorChannel)
  • 自动白平衡:OpenCvIn.autoColorBalance(bitmap)
  • 曲线工具:OpenCvIn.curveToolsPro(bitmap,bitmapMask,redXArray,redYArray,greenXArray,greenYArray,blueXArray,blueYArray,rgbXArray,rgbYArray)
  • 颜色选择器:OpenCvIn.changeColorByChannelPro(Bitmap bitmap,Bitmap mask, float redRed, float redGreen, float redBlue,float redBlack, float greenRed, float greenGreen, float greenBlue,float greenBlack, float blueRed, float blueGreen, float blueBlue,float blueBlack, float cyanRed, float cyanGreen, float cyanBlue,float cyanBlack, float yellowRed, float yellowGreen, float yellowBlue,float yellowBlack, float carmineRed, float carmineGreen, float carmineBlue,float carmineBlack, float whiteRed, float whiteGreen, float whiteBlue,float whiteBlack, float blackRed, float blackGreen, float blackBlue,float blackBlack, boolean isRelative);
  • HSL:OpenCvIn.hsl(Bitmap bitmap,Bitmap mask,float r_s,float r_h,float r_b ,float g_s,float g_h,float g_b ,float b_s,float b_h,float b_b ,float c_s,float c_h,float c_b ,float m_s,float m_h,float m_b ,float y_s,float y_h,float y_b ,float o_s,float o_h,float o_b ,float p_s,float p_h,float p_b)
  • 饱和度:
val tmp = OpenCvIn.changeSaturationTwo(Bitmap bitmap,Bitmap mask,float saturationStrength)
val currentBitmap = OpenCvIn.startChangeHsbS(Bitmap bitmap,Bitmap mask, float redAdjust, float greenAdjust, float blueAdjust, float cyanAdjust, float yellowAdjust, float carmineAdjust)
  • 明度:OpenCvIn.changeLightByChannel(Bitmap bitmap,Bitmap mask,float redValue,float yellowValue,float greenValue,float cyanValue,float blueValue,float carmineValue)
  • 色相:OpenCvIn.startChangeHsbH(Bitmap bitmap,Bitmap mask, float redAdjust, float greenAdjust, float blueAdjust, float cyanAdjust, float yellowAdjust, float carmineAdjust)
  • 色彩平衡:OpenCvIn.changeColorBalance(Bitmap bitmap,Bitmap mask, int cyanAndRedLow, int carmineAndGreenLow, int yellowAndBlueLow, int cyanAndRedMiddle, int carmineAndGreenMiddle, int yellowAndBlueMiddle, int cyanAndRedHight, int carmineAndGreenHight, int yellowAndBlueHight)
  • 对比度:OpenCvIn.brinessAndContrastChange(Bitmap bitmap,Bitmap mask, int briness, int contrast)
  • 亮度:OpenCvIn.brinessAndContrastChange(Bitmap bitmap,Bitmap mask, int briness, int contrast)
  • 高光阴影:OpenCvIn.HighAndDarkLightChange(Bitmap bitmap,Bitmap mask,float darkLight,float highLight)
  • 色温:OpenCvIn.changeTemp(Bitmap bitmap,Bitmap mask,int tempValue)
  • 色调:OpenCvIn.changeColorHue(Bitmap bitmap,Bitmap mask,int tempValue)
  • 暗角:OpenCvIn.darkCorner(Bitmap sourceBitmap,Bitmap maskBitmap,boolean isBlac,float strength)

其他功能

其他的很多功能并没有罗列出来,比如图片的叠加模式、通过灰度进行白平衡等功能,因为还没有整理到demo中去,不过都可以在OpenCvIn这个类中找到。后面有时间再慢慢整理到demo中去。

蒙层实现原理

蒙层的绘制并没有加入该项目中,不过该项目中的大部分功能是允许传入一个蒙层进行处理的,和photoshop一样,蒙层亮度越高,表示处理强度越大,黑色为完全不处理。下面是“调色编辑大师”中几个蒙层的实现方式:

  • 智能蒙层:接入的是华为AI实现的,目前大部分AI功能是免费的,这部分是接入链接,有需要的同学可以看看,图像分割-图像类服务开发-应用开发-Android-机器学习服务 | 华为开发者联盟 (huawei.com)。接入该部分主要目的是获取图像的分割区域,生成一张黑白的图片,这张图既是一张蒙层图片。
  • HSB蒙层:用户点击图片某个区域,获取点击区域的HSB色值,并在整张图片中找出与之相近的HSB区域,匹配区域为白色,未匹配区域为黑色。
  • 阈值蒙层:亮度超过某一值时将被匹配并被标注为白色,未匹配为黑色。
  • RGB蒙层:与阈值蒙层类似,不过对三通道进行了区分。
  • 渐变蒙版:用户手动拉取图片,越接近点击起点,颜色越接近白色。
  • 绘制蒙版:通过用户自己绘制不同形状的蒙版区域。
  • 剪贴蒙版:用户可添加一张叠加图片,这张叠加图片只会显示在蒙版非黑色区域,显示强度因蒙版亮度而定。
  • 模糊概念:上面几个蒙版都有一个“模糊”属性,实际上就是对蒙版进行高斯模糊,使黑白交接出过度的更加平滑。