2010-11-23 1 views
3

Je travaille sur un script depuis un certain temps maintenant pour changer les couleurs des fichiers GIF et PNG qui fonctionnent mieux que le filtre de colorisation PHP, qui ne conserve pas luminosité. Je suis venu avec, mais cela ne fonctionne pas tout à fait raison:PHP GIF/PNG True Colorize Filtre qui préserve la luminosité et l'alpha

$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

Quel est le filtre Colorier PHP et que voulez-vous qu'il fasse? Ne pas oublier: Qu'est-ce qui ne fonctionne pas dans votre code actuel? – AndreKR

+0

Le code actuel fonctionne, mais ce n'est pas tout à fait correct. Il ne préserve pas vraiment la luminosité et ne conserve pas de canal alpha. Filtre PHP: Coloriser va changer la couleur, mais pas préserver la luminosité. Voici la page pour cela: http://php.net/manual/en/function.imagefilter.php –

Répondre

4

On dirait que vous voulez un niveau de gris teinté. Favorisent ainsi la transparence ...

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

+0

Cela semble intéressant. J'ai téléchargé une image à leur test et cela n'a pas fonctionné. Ça m'inquiète que ça marche vraiment, mais je vais voir ce que je ressens. –

+0

Bon, alors j'ai essayé et c'est ce que fait le filtre PHP 'Colorize'. Ce n'est pas préserver le noir dans l'image. Il conserve cependant le blanc. –

+1

Bon, réessayez à http://www.exorithm.com/algorithm/view/duotone_image, mais cette fois-ci, définissez le drapeau pcnt –

-1

Essayez avec ces fonctions après $im = imagecreatefrompng($filename);

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

Et utiliser imagecreatetruecolor():

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

Cela ne résout pas mon problème de luminosité ou de colorisation. –

Questions connexes