PHP GIF / PNG Gerçek Renklendirme Filtre o korur Parlaklık ve Alfa

0 Cevap php

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);

0 Cevap