<?php
$img=imagecreatefrompng('dense.png');
list($width, $height)=getimagesize('dense.png');
$t=0;
for( $i=0 ; $i<$height ; $i++ )
{
for( $j=0 ; $j<$width ; $j++ )
{
$pix = imagecolorat($img, $i, $j);
$cols = imagecolorsforindex($img, $pix);
$r = $cols['red'];
$g = $cols['green'];
$b = $cols['blue'];
$pixel[$i][$j][0]=$r;
$pixel[$i][$j][1]=$g;
$pixel[$i][$j][2]=$b;
}
}
for( $i=0 ; $i<$height ; $i++ )
{
for( $j=0 ; $j<$width ; $j++ )
{
echo "(".$i.",".$j.") color of that pixel is (".$pixelcolor[$i][$j][0].",".$pixelcolor[$i][$j][1].",".$pixelcolor[$i][$j][2].").</p>";
}
echo"<br/>";
}
?>
这是我的代码,但是当我运行此代码时,它会给我一个空白的网页。
我想创建一个存储每个像素的rgb值的数组,它也会在网页上打印并减少数组中重复的值。
所以我想知道图片中有多少种颜色?
答案 0 :(得分:1)
您的代码可能因内存耗尽错误而死亡。创建一百万左右的数组可能会导致这种情况。这是一个脚本,以相当有效的方式计算图像中唯一颜色的数量(对于PHP):
<?php
$path = "test.jpg";
$img = imagecreatefromjpeg($path);
$w = imagesx($img);
$h = imagesy($img);
// capture the raw data of the image
ob_start();
imagegd2($img, null, $w);
$data = ob_get_clean();
$totalLength = strlen($data);
// calculate the length of the actual pixel data
// from that we can derive the header size
$pixelDataLength = $w * $h * 4;
$headerLength = $totalLength - $pixelDataLength;
// use each four-byte segment as the key to a hash table
$counts = array();
for($i = $headerLength; $i < $totalLength; $i += 4) {
$pixel = substr($data, $i, 4);
$count =& $counts[$pixel];
$count += 1;
}
$colorCount = count($counts);
echo $colorCount;
?>
$ colorCount是图像中唯一颜色的数量。 $ counts为您提供每种颜色出现的次数。每个$ key是一个4字节的字符串。第一个字节是透明度。值为零表示不透明。第二,第三和第四字节分别是R,G和B.您需要调用ord()来获取值。
答案 1 :(得分:0)
您可以使用imagecolorstotal()函数
获取图像中的颜色总数 <?php
// Create image instance
$im = imagecreatefromgif('php.gif');
echo 'Total colors in image: ' . imagecolorstotal($im);
// Free image
imagedestroy($im);
?>