在PHP GD中,如何将一张真彩色图片转换为调色板,同时不会失去任何颜色。使用
此外,我认为这与我的代码无关,而是与
imagetruecolortopallete
它无法工作。我有一个函数,可以遍历所有颜色并过滤它们(例如灰度),但是它不能保留所有颜色,比如这张兰博基尼的图片-
这是我的代码
$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
如何输出有关。