php获取图片颜色值的两种方法
<?php
$i=imagecreatefromjpeg("photo3.jpg");//测试图片
for ($x=0;$x<imagesx($i);$x++) {
for ($y=0;$y<imagesy($i);$y++) {
$rgb = imagecolorat($i,$x,$y);
$r=($rgb >>16) & 0xff;
$r=($rgb >>16) & 0xff;
$g=($rgb >> & 0xff;
$b=$rgb & 0xff;
$rtotal += $r;
$gtotal += $g;
$btotal += $b;
$total++;
}
}
$raverage = round($rtotal/$total);
$gaverage = round($gtotal/$total);
$baverage = round($btotal/$total);
//示例:
echo $raverage;
?>
例2,php获取图片主要rgb颜色值。
根据用户上传的图片检索出图片的主要颜色值,然后通过颜色搜索相关的图片。
按照网上的方法将图片缩放(或者马赛克)然后遍历每个像素点,然后统计处rgb次数最多的值,这做法效率太低而且取到的rgb值不够精确。
之后才发现使用imagick的quantizeimage方法能够很方便的取到图片中平均的rgb值。(bbs.it-home.org 脚本学堂)
代码:
?php
$average = new imagick("xiaocai.jpg");
$average->quantizeimage( 10, imagick::colorspace_rgb, 0, false, false );
$average->uniqueimagecolors();
function getimagescolor( imagick $im ){
$colorarr = array();
$it = $im->getpixeliterator();
$it->resetiterator();
while( $row = $it->getnextiteratorrow() ){
foreach ( $row as $pixel ){
$colorarr[] = $pixel->getcolor();
}
} // bbs.it-home.org
return $colorarr;
}
$colorarr = getimagescolor($average);
foreach($colorarr as $val){
echo "
";
}
输出结果: