2010-12-07 16 views
3

PHP +画像操作で少し実験をしています。私はいくつかの画像を白黒バージョンに変換しようとしています。私はほとんどそれを考え出したが、わずかな問題がある。imagejpegを使用して画像ファイルを保存して配信する

サーバーの負荷を軽減するために、私はB & Wバージョンを保存し、前にスクリプトで実行されていないイメージにのみイメージフィルタリングを実行したいと考えました。

<?php 
header("Content-type: image/jpeg"); 

$file = $_GET['img']; 
$name = md5($file).".jpg"; 

if(file_exists("/path/to/file" . $name)) { 

    ob_clean(); 
    flush(); 
    readfile("path/to/file" . $name); 
    exit; 

} 
else { 

$image = imagecreatefromjpeg($file); 

imagefilter($image, IMG_FILTER_GRAYSCALE); 
imagejpeg($image, "/path/to/file" . $name); 

imagedestroy($image); 
}; 

?> 

これは、ファイルのB & Wバージョンを作成し、サーバーに保存しない:だから、私はこのような何かを持っています。最初の "if"ステートメントも動作しています。イメージがすでに存在する場合は、正しく処理されます。

問題は、実行された新しい画像では保存されますが、ブラウザには出力されません。それを行うために私は何を使用/変更することができますか?

また、このようなことは初めてです。あなたが上記のことをしている一般的なヒントは高く評価されます。

答えて

5

コンパクトで正しいフォームを使用できます

<?php 
header("Content-type: image/jpeg"); 

$file = $_GET['img']; 
$name = md5($file).".jpg"; 

if(!file_exists("/path/to/file" . $name)) { 
imagefilter($image, IMG_FILTER_GRAYSCALE); 
imagejpeg($image, "/path/to/file" . $name); 
} else { 
$image = imagecreatefromjpeg("/path/to/file" . $name); 
} 

imagejpeg($image); 
imagedestroy($image); 

?> 
2

imagejpeg()の画像をelseの部分に保存しているため、画像は表示されません。 だから、imagedestroy()

readfile("/path/to/file". $name); 

を追加する必要があります;)。上記の機能のための

1

あなたは、関数内で画像出力コードをラップすることができ - このような何か(未テスト):

function output_image ($image_file) { 
    header("Content-type: image/jpeg"); 
    header('Content-Length: ' . filesize($image_file)); 
    ob_clean(); 
    flush(); 
    readfile($image_file); 
} 

$file = $_GET['img']; 
$name = md5($file) . ".jpg"; 
$image_file = "/path/to/file/" . $name; 

if(!file_exists($image_file)) { 

    $image = imagecreatefromjpeg($file); 
    imagefilter($image, IMG_FILTER_GRAYSCALE); 
    imagejpeg($image, $image_file); 
    imagedestroy($image); 

} 

output_image($image_file); 
+4

なぜダウン投票?私が間違っているものを修正できるように、説明が役に立ちます。 – Mike

関連する問題