2010-11-23 25 views
3

私は今、GIFとPNGファイルの色を変更するスクリプトを作成しています。光度。私はこれを作ってみたが、それは全く正しい動作しません:PHP GIF/PNG明るさとアルファを維持するTrue Colorizeフィルタ

$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

...透明度をサポートしていますか?あなたの現在のコードでは何が動作しないのですか? – AndreKR

+0

現在のコードは動作しますが、正しくはありません。これは真に明度を保持するものではなく、アルファチャンネルを保持しません。 PHPフィルタ:Colorizeは色を変更しますが、明るさは保持しません。ここにそれのためのページがあります:http://php.net/manual/en/function.imagefilter.php –

答えて

4

をあなたは薄いグレースケールがほしいと思うように聞こえます。これは、PHPの色付けフィルタとあなたがそれをやりたいんです何

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

+0

それは面白そうです。私は彼らのテストに画像をアップロードし、それは動作しませんでした。それが実際に働いていることを心配していますが、私は何を得るのか分かります。 –

+0

そうですね、私はそれを試しました。それはPHP Filter 'Colorize'と同じことをしています。それはイメージの黒を保存していません。しかしそれは白を保存します。 –

+1

さて、http://www.exorithm.com/algorithm/view/duotone_imageでもう一度お試しください。しかし今回はpcntフラグ –

-1

$im = imagecreatefrompng($filename);

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

後に、これらの機能を試してみて、imagecreatetruecolor()の使用:

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

それは私の明るさや色の問題を解決しません。 –

関連する問題