老照片特效 php,图像处理之老照片特效

news/2024/7/3 5:53:16 标签: 老照片特效 php

PS中有一种滤镜可以让图像看上去好像历经岁月,微微泛黄

英文中这种图像特效被称为Sepia Tone Effect 直译过来的意思

就是黄褐色特效。它的基本处理算法如下:

1. 首先对图像重新计算RGB值,计算公式如下:

int fr= (int)(((double)tr * 0.393) + ((double)tg * 0.769) + ((double)tb * 0.189)); int fg = (int)(((double)tr * 0.349) + ((double)tg * 0.686) + ((double)tb * 0.168)); int fb= (int)(((double)tr * 0.272) + ((double)tg * 0.534) + ((double)tb * 0.131));2. 对图像计算出来的新的RGB值根据随机权重与旧值混合。

计算随机权重的代码如下:

private double noise() { return Math.random()*0.5 + 0.5; }混合颜色的代码如下:

private double colorBlend(double scale, double dest, double src) { return (scale * dest + (1.0 - scale) * src); }效果如下:

0a156396a014d330e2d6f3d7772b96f4.png

滤镜完全源代码:

package com.gloomyfish.filter.study; import java.awt.image.BufferedImage; public class SepiaToneFilter extends AbstractBufferedImageOp { @Override public BufferedImage filter(BufferedImage src, BufferedImage dest) { int width = src.getWidth(); int height = src.getHeight(); if ( dest == null ) dest = createCompatibleDestImage( src, null ); int[] inPixels = new int[width*height]; int[] outPixels = new int[width*height]; getRGB( src, 0, 0, width, height, inPixels ); int index = 0; for(int row=0; row> 24) & 0xff; tr = (inPixels[index] >> 16) & 0xff; tg = (inPixels[index] >> 8) & 0xff; tb = inPixels[index] & 0xff; //int fr= (int)(((double)tr * 0.393) + ((double)tg * 0.769) + ((double)tb * 0.189)); //int fg = (int)(((double)tr * 0.349) + ((double)tg * 0.686) + ((double)tb * 0.168)); //int fb= (int)(((double)tr * 0.272) + ((double)tg * 0.534) + ((double)tb * 0.131)); int fr = (int)colorBlend(noise(), (tr * 0.393) + (tg * 0.769) + (tb * 0.189), tr); int fg = (int)colorBlend(noise(), (tr * 0.349) + (tg * 0.686) + (tb * 0.168), tg); int fb = (int)colorBlend(noise(), (tr * 0.272) + (tg * 0.534) + (tb * 0.131), tb); outPixels[index] = (ta << 24) | (clamp(fr) << 16) | (clamp(fg) << 8) | clamp(fb); } } setRGB( dest, 0, 0, width, height, outPixels ); return dest; } private double noise() { return Math.random()*0.5 + 0.5; } private double colorBlend(double scale, double dest, double src) { return (scale * dest + (1.0 - scale) * src); } public static int clamp(int c) { return c > 255 ? 255 :( (c < 0) ? 0: c); } public String toString() { return "Sepia Tone Effect - Effect from Photoshop App"; } }


http://www.niftyadmin.cn/n/1288100.html

相关文章

单片机断电后静态存储区里面还有数据吗_嵌入式开发,各类存储方式知多少?...

ROM & RAMROM&#xff08;Read Only Memory&#xff09;ROM在系统停止供电的时候仍然可以保持数据&#xff0c;如光盘CD-ROM&#xff0c;可以保存文件&#xff0c;且只能读取。RAM&#xff08;Random Access Memory&#xff09;RAM通常都是在掉电之后就丢失数据&#xff0c…

php-fpm中文,php-fpm文档中文翻译

fast-cgi是做啥用的FastCGI是一个可伸缩的&#xff0c;高速地在web server和脚本语言间交互的接口。关于FastCGI技术的更多信息可以在官方网站和这里看到。多数流行的web server都支持FastCGI。包括Apache(mod_fastcgi和mod_fcgid)&#xff0c;Zeus&#xff0c;nginx和lighttpd…

获取表结构信息(字段名,类型,长度,精度,小数位数,主键,自动增长)...

原文:获取表结构信息&#xff08;字段名&#xff0c;类型&#xff0c;长度&#xff0c;精度&#xff0c;小数位数&#xff0c;主键&#xff0c;自动增长&#xff09;获取表结构的一些简要信息&#xff0c;可以生成自己需要的字典&#xff0c;简单又实用&#xff01; 以数据表PP…

JAVA冰箱评测开题报告,关于电冰箱相关论文范例,与电冰箱制冷系统的维修技术相关研究生毕业论文开题报告...

本论文为关于电冰箱相关毕业设计论文,关于电冰箱制冷系统的维修技术相关研究生毕业论文开题报告&#xff0c;可用于电冰箱论文写作研究的大学硕士与本科毕业论文开题报告范文和优秀学术职称论文参考文献资料下载。免费教你怎么写电冰箱及制冷剂及毛细管方面论文范文。【摘 要】…

性能测试loadrunner场景问题之socket

2.2 Socket场景问题2.21在场景执行中&#xff0c;异步交易socket连接中断&#xff0c;同步交易正常进行。在bancs稳定性测试中遇到过该问题&#xff0c;经过检查并不是系统出现故障导致服务中断&#xff0c;而是loadrunner种场景设置的问题。由于分端口进行测试异步脚本分成了四…

单相桥式有源逆变电路matlab,单相桥式有源逆变电路在MATLAB中的建模与仿真

电子技术研发Electronics R&D 电子技术 10&#xff0e;3969~&#xff0e;issn&#xff0e;1000—0755&#xff0e;2016&#xff0e;04&#xff0e;001 蔡红专 吴玉平 眸 涛 曹 琴 (西京学院控制工程学院&#xff0c;陕西 西安 710123) 摘 要&#xff1a;通过对单相桥式全控…

ssm框架整合_SSM框架整合(超详细)

SpringSpringMVCMybatisSpring负责bean配置和事务,aop等SpringMVC负责web层逻辑及JSP页面Mybatis负责持久层逻辑&#xff0c;与数据库进行交互Mybatis层&#xff1a;高度集成&#xff0c;降低耦合&#xff0c;Mybatis配置文件存在的必要性越来越小&#xff0c;在Mybatis配置中配…

asp.net core中使用log4net

和之前的ASP.NET MVC中的使用LOG4NET的方法有些不同&#xff0c;这里先记录一下&#xff0c;使用步骤如下 &#xff1a; 1. 建立 ASP.NET CORE项目中&#xff0c;NUGET中搜索log4net后下载安装 2. 根目录建立 log4net.config文件&#xff0c;内容如下&#xff1a; <?xml ve…