PHP Imagick 批量转换彩色图片成黑白

在推上跟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安装可以参照下这儿

<?php
/**
 * 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();
    
}
}
?>

Tags : ,

Google Reader Yahoo Facebook Twitter Digg FriendFeed Delicious Google Translate
这篇日志发表于2010年08月16日 11:53。 你可以订阅该日志的所有评论通过 RSS 2.0。 评论当前被关闭,你可以引用通告

评论当前被关闭。