2010-12-02 15 views
0

イムを変換した後、ファイルに新たな画像データを書き込ん:、画像を撮るグレースケールに変換して、グレースケール画像を保存するには、次のコードを使用してグレースケールのphpに

$imagename = "$imagename"; // path to previously uploaded color jpeg 

     $im = ImageCreateFromJpeg($imagename); 

    $imgw = imagesx($im); 
    $imgh = imagesy($im); 

    for ($i=0; $i<$imgw; $i++) 
    { 
      for ($j=0; $j<$imgh; $j++) 
      { 

        $rgb = ImageColorAt($im, $i, $j); 

        $rr = ($rgb >> 16) & 0xFF; 
        $gg = ($rgb >> 8) & 0xFF; 
        $bb = $rgb & 0xFF; 

        $g = round(($rr + $gg + $bb)/3); 

        $val = imagecolorallocate($im, $g, $g, $g); 

        imagesetpixel ($im, $i, $j, $val); 
      } 
    } 

    $grayimgpath = "step2cache/".$saltname."_gray.jpg"; //$saltname is a randomly generated image name 



$fh = fopen($grayimgpath, 'w') or die("can't open file"); 
fwrite($fh, $im); 
fclose($fh); 

とき、私の問題は、ありますこのファイル、その空白、15バイトにアクセスします。

ここには何が欠けていますか?

答えて

2

。試してみてください:

imagejpeg($im, $grayimgpath); 
2

イメージオブジェクトをファイルに書き込むだけでは、作成できません。 GDライブラリにはそのための関数があります。ので、代わりにfopenfwrite、あなたは、2番目のパラメータでファイル名でimagejpegを使用する必要があります:あなたは、画像は実際の画像データを処理していないファイルへの書き込みをしようとしている

imagejpeg($im, $grayimgpath); 
+0

なぜですか?ちょうど興味深い – mrpatg

+0

'$ im'はファイルのバイナリコンテンツではなく、GDで定義された内部構造を含むPHPオブジェクトです。あなたがファイルに書き込むときには、おそらく '(string)$ im'と同じテキスト表現を書いています。実際に私の心を越えていた – NOtherDev

+0

、説明のためにありがとう – mrpatg

関連する問題