所以我制作了这个脚本来获取图像中最常用的颜色。问题是,他们用我编码的方式让它变得非常无用。
该脚本只能在小图像上找到颜色。大的会产生这个错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes)
我将每个像素的十六进制值插入到一个数组中。这就是问题所在,我应该怎么做才能避免使用大型阵列?
剧本:
$im = imagecreatefromjpeg("images/2.jpg");
function common($img) {
$w = imagesx($img);
$h = imagesy($img);
$r = $g = $b = 0;
$count = 0;
$array = array();
for($y = 0; $y < $h; $y++) {
for($x = 0; $x < $w; $x++) {
$rgb = imagecolorat($img, $x, $y);
$r += $rgb >> 16;
$g += $rgb >> 8 & 255;
$b += $rgb & 255;
$hex = "#";
$hex.= str_pad(dechex($r), 2, "0", STR_PAD_LEFT);
$hex.= str_pad(dechex($g), 2, "0", STR_PAD_LEFT);
$hex.= str_pad(dechex($b), 2, "0", STR_PAD_LEFT);
$array[$count++] = $hex;
}
}
$result = array_count_values($array);
asort($result);
end($result);
$answer = key($result);
return $answer;
}
$common = common($im);
echo $common;