В PHP GD, как вы можете преобразовать полноцветный изображения в палитру без потери любых цвета. С imagetruecolortopallete
это не работает. У меня есть функция, которая проходит через все цвета и фильтрует их (например, оттенки серого). и Он не сохраняет все цвета, такие, как эта картина в Lamborghini-PHP GD палитра цветы
Изображение
Это мой код
$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);
И это выглядит следующим образом
Вы можете увидеть она теряет цвета. Есть любое решение?
Кроме того, я не думаю, что он должен делать с моим кодом, но как imagetruecolortopalette
выводит его
Преобразование палитры библиотеки GD происходит быстро, но очень неточно. Если вы хотите использовать палитру, я рекомендую использовать команду [pngquant] (https://github.com/pornel/improved-pngquant) через [popen()] (http://php.net/popen) - пока это будет потерять * некоторые * цвета, потеря не будет такой же плохой. – Kornel