PHP Imagick 批量转换彩色图片成黑白
luyued 发布于 2011-04-19 09:27 浏览 N 次在推上跟mg12大神交流,说到非IE浏览器下面的页面变灰的方法,开始我还以为有类似IE下的滤镜的简单方法实现,没想到居然是改图片改CSS。。。ORZ
于是就写了这个批量转换的脚本,支持GIF动画。大致的原理是将图片逐帧逐像素的读出来,取到RGB色值,然后将当前的色值改成r*0.5+g*0.3+b*0.2,最后替换之即可。需要PHP 5.1.3和PECL Imagick 2.0.0或更高版本。WIN下的Imagick安装可以参照下这儿。
/*** Color images convert to gray.
*
* Author:zzjin (jin@ouyang.org)
*
* This script requires PHP 5.1.3+ and PECL Imagick 2.0.0+
*/
//原始图片目录
$sourcePath = './';
//存放黑白图片目录
$targetPath = './gray/';
//原始图片目录下的文件后缀名,LINUX下请注意大小写
$fileType = array('jpg', 'png', 'gif');
$files = array();
foreach ($fileType as $val) {
foreach (glob($sourcePath . '*.' . $val) as $file) {
$im = new Imagick($file);
$type = $im->getImageFormat();
$nums = $im->getNumberImages();
if ($type != 'GIF' || $nums == 1) {
colorToGray($im);
} else {
foreach ($im as $frame) {
colorToGray($frame);
}
}
if (!file_exists($targetPath)) mkdir($targetPath, 0777);
$im->writeImages($targetPath . basename($file), 1);
}
}
function colorToGray(&$im) {
$it = $im->getPixelIterator();
foreach ($it as $row => $pixels) {
foreach ($pixels as $column => $pixel) {
$colors = $pixel->getColor();
$gray = $colors['r'] * 0.5 + $colors['g'] * 0.3 + $colors['b'] * 0.2;
$pixel->setColor("rgb($gray,$gray,$gray)");
}
$it->syncIterator();
}
}
?>
相关资讯
- 05-20· 证 据 目 录的格式
- 05-14· 发现一个BUG nForce2 的主板
- 05-14· NEC EXPRESSCLUSTER X3.0 FOR WIN
- 05-14· 最近有什么好听的歌呢?
- 05-13· 小园子的惊喜
- 05-13· 推荐的电脑配置
- 05-13· 飒飒秋风起,点点胭脂泪
- 05-13· 振作!!
- 05-11· 宏碁/精英有意并购浩鑫
- 05-11· [转]真实:17岁少年在校不
图文资讯
最新资讯
- 05-09· 3、21--3、25成长足迹公布
- 05-09· 和小伙伴闹矛盾(3月5日)
- 05-09· 浩鑫简约 X27D
- 05-09· 今天有点烦躁
- 05-09· 为什么富士康郭台铭最看
- 05-09· 南通热线信息超市_南通汽
- 05-09· [置顶]iPad2零组件供应商剖
- 05-09· 北京富士康科技有限公司
- 05-09· 富士康去年亏损2.18亿美元
- 05-09· 《富士康十二连跳在这以