1

画像もキャッシュする動的画像ジェネレーターを作成しようとしています。

画像を保存して同時に表示しようとすると、壊れた画像アイコン(http://cl.ly/image/3K1f0R0n1R0Uなど)が表示されることを除いて、すべてが完全に機能します。

コードサンプル:

// some string parsing junk happens up here, but removing that didn't change 
// what I've been having a problem with

header("Content-type: image/png;");

if(file_exists($fullFileName)){ // serve the file if it already exists
    ob_clean();
    flush();
    readfile($fullFileName);
    exit;
} else { // create the file if it doesn't exist
    $my_img = imagecreate(200, 80);
    $background = imagecolorallocatealpha($my_img, 0, 0, 0, 127);
    $line_colour = imagecolorallocatealpha($my_img, $color["r"], $color["g"], $color["b"], $color["a"]);

    imagesetthickness($my_img, 1);
    imageline($my_img, 30, 45, 165, 45, $line_colour);

    //////////////////////////////////////////
    // the line that's causing my troubles: //
    //////////////////////////////////////////
    imagepng($my_img, $fullFileName);


    imagecolordeallocate($line_color);
    imagecolordeallocate($background);
    imagedestroy($my_img);
}

したがって、画像は適切に作成され、適切に保存され、ページを更新したときに希望どおりに表示されます(保存されたファイルを取得するため)。

上記のダーンラインを次のように切り替えた場合:

imagepng($my_img);

その後、画像は正常に表示されますが、保存されません(私が指示していないため)。

私はこのトピックを考えました:

PHPエコーjpeg画像は失敗しますが、同じ画像をファイルに書き込むことはうまくいきます。なんで?

似ているように聞こえますが、末尾の空白を削除しても、何が起こっているかは変わりませんでした。他のスレッドは、ヘッダーの前に送信される他のコンテンツに問題がある可能性があると述べていますが、このファイルにはそのようなものはありません。

何がうまくいかないかについてのアイデアはありますか?エラーは記録されておらず、私は考えがありません。

ありがとう!

-ザック

編集:

私は自分のイメージを破壊していると説明されましたが、それは私が見逃していました。私はこれを使用することになりました:

header("Content-type: image/png");

if(!file_exists($fullFileName)) {
    $my_img = imagecreate($dashWidth + $dashSpace, $height);
    $background = imagecolorallocatealpha($my_img, 0, 0, 0, 127);
    $line_colour = imagecolorallocatealpha($my_img, $color["r"], $color["g"], $color["b"], $color["a"]);

    imagesetthickness($my_img, 1);
    imageline($my_img, 0, $height-1, $dashWidth-1, $height-1, $line_colour);

    imagepng($my_img, $fullFileName);
    imagecolordeallocate($my_img, $line_color);
    imagecolordeallocate($my_img, $background);
}

ob_clean();
flush();
readfile($fullFileName);
exit;
4

3 に答える 3

5

もしかして

header("Content-type: image/png"); // without ;

また、あなたはあなたのイメージを破壊しています、ファイルをもう一度読んでください

readfile($fullFileName);

imagepng($my_img, $fullFileName);保存するだけだからです。

于 2012-08-17T18:48:23.510 に答える
3

マニュアルから、imagepng

指定された画像からPNG画像を出力または保存します

「または」に注意してください。に2回呼び出してみてくださいimagepng。1回の呼び出しでファイルに保存し、1回の呼び出しでfilenameパラメーターを指定せずに画像をブラウザーに出力します。

于 2012-08-17T18:41:37.043 に答える
0

テキストエディタで画像を開いてみてください。error_reportingをオフにします。壊れた画像を表示します。

于 2012-08-17T18:45:49.387 に答える