2010-11-23 3 views
3

Ich habe seit einiger Zeit an einem Skript gearbeitet, um die Farben von GIF- und PNG-Dateien zu ändern, die besser funktionieren als der PHP-Farbfilter, der nicht beibehalten wird Helligkeit. Ich habe mit dieser kommen, aber es ist nicht ganz richtig funktioniert:PHP GIF/PNG True Colorize-Filter, der Leuchtkraft und Alpha bewahrt

$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

Was die PHP kolorieren Filter und was wollen Sie es tun? Nicht zu vergessen: Was funktioniert in deinem aktuellen Code nicht? – AndreKR

+0

Der aktuelle Code funktioniert, aber es ist nicht ganz richtig. Es bewahrt die Leuchtkraft nicht wirklich und bewahrt keinen Alphakanal. PHP Filter: Colorize wird die Farbe ändern, aber nicht die Leuchtkraft erhalten. Hier ist die Seite dafür: http://php.net/manual/en/function.imagefilter.php –

Antwort

4

Klingt nach einem getönten Graustufenbild. Dies unterstützt Transparenz ...

http://www.exorithm.com/algorithm/view/duotone_image

+0

Das sieht interessant aus. Ich habe ein Bild zu ihrem Test hochgeladen und es hat nicht funktioniert. Lässt mich besorgt darüber, dass es tatsächlich funktioniert, aber ich werde sehen, welchen Einfluss ich bekomme. –

+0

Richtig, also habe ich es ausprobiert und das macht dasselbe, was der PHP-Filter 'Colorize' tut. Es bewahrt nicht das Schwarz im Bild. Es bewahrt jedoch das Weiß. –

+1

Okay, versuchen Sie es erneut unter http://www.exorithm.com/algorithm/view/duotone_image, aber setzen Sie diesmal die pcnt-Flagge –

-1

mit diesen Funktionen Versuchen nach $im = imagecreatefrompng($filename);

imagealphablending($im, false); 
imagesavealpha($im, true); 

Und verwenden imagecreatetruecolor():

$nim = imagecreatetruecolor (imagesx($im), imagesy($im)); 
+0

Das löst mein Problem mit der Leuchtkraft oder der Farbgebung nicht. –