Trong PHP GD làm thế nào bạn có thể chuyển đổi một truecolor hình ảnh đến một bảng mà không làm mất bất kỳ màu sắc. Với imagetruecolortopallete
nó không hoạt động. Tôi có một chức năng chạy qua tất cả các màu sắc và lọc chúng (ví dụ: màu xám). và Nó không giữ lại tất cả các màu, chẳng hạn như hình ảnh này của một Lamborghini-PHP GD bảng màu
Hình
Đây là mã của tôi
$im = imagecreatefrompng("lamborghini.png");
$degrees = 0;
$img = imagecreatetruecolor(imagesx($im), imagesy($im));
imagecopy($img, $im, 0, 0, 0, 0, imagesx($im), imagesy($im));
imagetruecolortopalette($img, true, 256);
$t = imagecolorstotal($img);
for ($i = 0; $i < $t; $i++) {
$rgb = imagecolorsforindex($img, $i);
$hsv =rgbtohsv($rgb['red'], $rgb['green'], $rgb['blue']);
$h = $degrees;
$s = $hsv['s'];
$v = $hsv['v'];
while ($h > 360) {$h -= 360;};
$nrgb = hsvtorgb($h, $s, $v);
imagecolorset($img, $i, $nrgb['r'], $nrgb['g'], $nrgb['b']);
}
imagecopy($im, $img, 0, 0, 0, 0, imagesx($img), imagesy($img));
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
Và nó trông giống như thế này
Bạn có thể thấy nó mất màu. Có bất kỳ giải pháp nào?
Ngoài ra tôi không nghĩ rằng nó đã làm với mã của tôi nhưng làm thế nào imagetruecolortopalette
đầu ra nó
Chuyển đổi bảng màu của thư viện GD nhanh nhưng rất không chính xác. Nếu bạn muốn sử dụng bảng màu, tôi khuyên bạn nên sử dụng dòng lệnh [pngquant] (https://github.com/pornel/improved-pngquant) thông qua [popen()] (http://php.net/popen) - trong khi điều này sẽ lỏng * một số * màu sắc, sự mất mát sẽ không được như xấu. – Kornel