您的位置:首页 > 电脑网络 > 电脑配件 > PHP Imagick 批量转换彩色图片成黑白

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();
}
}
?>
图文资讯
广告赞助商