一句话,滤镜的实现就是对像素点(RGBA)进行再运算,输出新的像素点。    F(r,g,b,a)=G(r,g,b,a);

这个公式包含四个变换,即RGB颜色空间中RGB三个分量的变换以及透明度Alhpa的变换,这里我们简写为A的变换。

举个灰度变换的例子,它对应的F——G变换如下:

F(r) = b * 0.114 + g * 0.587 + r * 0.299;

F(g) = b * 0.114 + g * 0.587 + r * 0.299;

F(b) = b * 0.114 + g * 0.587 + r * 0.299;

F(a) = a;

这个灰度化也就是一个基本变换。有了这个基本变换,图像也就达到了一定的效果,但是,一些复杂的滤镜,并非简单的基本变换,而是一些复杂的效果叠加,也就说

这个G函数是多个函数的联合体。

还有一种方法,对于一些滤镜产品,我们直观看到的滤镜效果是已经生成的新像素点组成,也就是说如果我们想破解这种滤镜,

我们可以通过颜色映射构建一个映射表,然后通过查表来快速实现该变换效果,

这种万能滤镜破解的方法,请参考 http://blog.csdn.net/trent1985/article/details/42212459

本人看了以上博主的很多滤镜相关的博文,得到很多启发(感谢!)

以下是Java实现Lomo效果的代码,可以直接用。

public static void Lomo(String fromPath, String toPath) throws IOException {

BufferedImage fromImage = ImageIO.read(new File(fromPath));

int width = fromImage.getWidth();
int height = fromImage.getHeight();
BufferedImage toImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

int a, r, g, b, grayValue = 0;

for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int rgb = fromImage.getRGB(i, j);
// 过滤
a = rgb & 0xff000000;
r = (rgb & 0xff0000) >> 16;
g = (rgb & 0xff00) >> 8;
b = (rgb & 0xff);

b = ModeSmoothLight(b, b);
g = ModeSmoothLight(g, g);
r = ModeSmoothLight(r, r);
b = ModeExclude(b, 80);
g = ModeExclude(g, 15);
r = ModeExclude(r, 5);

grayValue = a | (r << 16) | (g << 8) | b;
toImage.setRGB(i, j, grayValue);
}
}
ImageIO.write(toImage, "jpg", new File(toPath));
}

private static int ModeSmoothLight(int basePixel, int mixPixel) {
int res = 0;
res = mixPixel > 128
? ((int) ((float) basePixel + ((float) mixPixel + (float) mixPixel - 255.0f)
* ((Math.sqrt((float) basePixel / 255.0f)) * 255.0f - (float) basePixel) / 255.0f))
: ((int) ((float) basePixel + ((float) mixPixel + (float) mixPixel - 255.0f)
* ((float) basePixel - (float) basePixel * (float) basePixel / 255.0f) / 255.0f));
return Math.min(255, Math.max(0, res));
}

private static int ModeExclude(int basePixel, int mixPixel) {
int res = 0;
res = (mixPixel + basePixel) - mixPixel * basePixel / 128;
return Math.min(255, Math.max(0, res));
}

public static void main(String[] args) throws Exception {

Lomo("C:\\2.jpg", "C:\\test2.jpg");

}

java 滤镜实现的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. Android 照相 滤镜

    android-image-filter 19种相片滤镜,使用也简单,all filters in file BitmapFilter.java : Bitmap newBitmap = Bitmap ...

  3. java 解析并生成 XML

    在 java 中使用 Dom4j 解析 XML 对 XML 文件的解析,通常使用的是 Dom4j 和 jdom 作为XML解析工具. 在此只介绍下 Dom4j 对 XML 文件的解析使用方法. 1. ...

  4. Android 图片滤镜工具——高斯模糊

    ===================高斯模糊========================= 创建一个 ImageFilter 类(滤镜工具),代码如下: import android.graph ...

  5. Atitit Atitit 图像处理之  Oilpaint油画滤镜 水彩画 源码实现

    Atitit Atitit 图像处理之 Oilpaint油画滤镜 水彩画 源码实现 1.1. 具体原理参考1 2. 水彩画滤镜算法如下:1 2.1. 这个其实就是灰度层次降低维度的过程.2 2.2. ...

  6. Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2

    Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2 1.1. 具体源码参考1 2. ,油画 水彩画具有几个比较明显的特点如下:1 2.1. 明暗层次(灰度)较少  也 ...

  7. Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结

    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结 1.1. 素描滤镜的实现方法比较简单,这里我们直接写出算法过程如下:1 1.2. 颜色减淡COLOR_DO ...

  8. Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库

    Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库1.1. 5种常用的Photoshop滤镜,分别针对照片的曝光.风格色调.黑白照片处理.锐利度.降噪这五大 ...

  9. Android OpenGL 编写简单滤镜

    Android 上使用Opengl进行滤镜渲染效率较高,比起单纯的使用CPU给用户带来的体验会好很多.滤镜的对象是图片,图片是以Bitmap的形式表示,Opengl不能直接处理Bitmap,在Andr ...

随机推荐

  1. JAVA 打出jar包

    1.eclipse下导出 jar包:选择项目右键--->Export...----> 选择java下的JAR file---->next--->选择存入路径--->nex ...

  2. java 删除目录、 文件

    示例 import java.io.File; public class fileTest { public static void main(String []args){ String strVe ...

  3. ios-自定义alertView提示框

    先上图,弹框的背景色,按钮背景色,提示的消息的字体颜色都可以改变 利用单例实现丰富的自定义接口 // // PBAlertController.h // PBAlertDemo // // Creat ...

  4. dubbo源码分析5-dubbo的扩展点机制

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  5. Ant安装、环境变量配置及验证

    一.安装ant 到官方主页http://ant.apache.org下载新版(目前为Ant1.8.1)的ant,得到的是一个apache-ant-1.8.1-bin.zip的压缩包.将其解压到你的硬盘 ...

  6. jquery easyui DataGrid 数据表格 属性

    用法 1.  <table id="tt"></table> 1.  $('#tt').datagrid({ 2.      url:'datagrid_d ...

  7. 十五、Java基础---------集合框架体系以及List

    在介绍集合之前先说一下数组,正如我们所知,数组是某一类型数据的集合,强调的是数据,而且必须单一:集合框架的不同之处在于存储的数据类型没有任何限制,既可以存储基本数据类型(会自动提升为相应的包装类)也可 ...

  8. :selected

    描述: 查找所有选中的选项元素 HTML 代码: <select> <option value="1">Flowers</option> < ...

  9. InnerJoin分页导致的数据重复问题排查

    2016年8月9号美好的七夕的早上,我精神抖擞地来到公司.一会之后,客服宅宅MM微信我,说一个VIP大店铺订单导出报表中一个订单有重复行.于是,我赶紧开始查探问题所在.经过一天的反复仔细追查(当然还包 ...

  10. 嵌入式Linux内核制作【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51291316 1. Linux体系结构 从整体上来分,linux可以分为User ...