In PHP GD come si può convertire l'immagine di un truecolor ad un palette senza perdere eventuali colori. Con imagetruecolortopallete
lo non funziona. Ho una funzione che attraversa tutti i colori e li filtra (ad esempio in scala di grigi). e Esso non conserva tutti i colori, come questa immagine di un Lamborghini-PHP GD colori della tavolozza
Immagine
Questo è il mio codice
$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);
Ed assomiglia a questo
Si può vedere perde i colori. C'è qualsiasi soluzione?
Anche io non credo che abbia a che fare con il mio codice, ma come imagetruecolortopalette
uscite è
La conversione della tavolozza della libreria GD è veloce, ma molto imprecisa. Se vuoi usare la palette, ti consiglio di usare commandline [pngquant] (https://github.com/pornel/improved-pngquant) tramite [popen()] (http://php.net/popen) - mentre questo perdere * alcuni * colori, la perdita non sarà così male. – Kornel