Ben GIF ve parlaklığını korumak değil PHP renklendirmek filtresi, daha iyi çalışır PNG dosyaları renklerini değiştirmek için bir süre için şimdi bir senaryo üzerinde çalışıyoruz. Ben bu ile geldim, ama oldukça doğru çalışmıyor:
$filename = "images/sprites/".$_GET['sprite'].".png";
$im = imagecreatefrompng($filename);
$nim = imagecreate( imagesx($im), imagesy($im) );
$background = imagecolorallocate($nim, 255, 0, 255);
$size = getimagesize($filename);
for($y = 0; $y < imagesy($nim); $y++) {
for($x = 0; $x < imagesx($nim); $x++) {
$rgb = imagecolorat($im, $x, $y);
$colors = imagecolorsforindex($im, $rgb);
$mods = explode("x",$_GET['color']);
$colors['red'] = ($colors['red'] / 8 + (255 - ((255 - $mods[0] - $colors['red']) * 2))) / 2;
$colors['green'] = ($colors['red'] / 8 + (255 - ((255 - $mods[1] - $colors['green']) * 2))) / 2;
$colors['blue'] = ($colors['red'] / 8 + (255 - ((255 - $mods[2] - $colors['blue']) * 2))) / 2;
$r = $colors['red'];
$g = $colors['green'];
$b = $colors['blue'];
if($r < 0) $r = 0;
if($g < 0) $g = 0;
if($b < 0) $b = 0;
if($r > 255) $r = 255;
if($g > 255) $g = 255;
if($b > 255) $b = 255;
if(!isset($color[$r.$g.$b])) {
$color[$r.$g.$b] = imagecolorallocate($nim, $r, $g, $b);
}
imagesetpixel($nim, $x, $y, $color[$r.$g.$b]);
}
}
imagecolortransparent($nim, 1);
header('Content-Type: image/png');
imagepng($nim);