画像もキャッシュする動的画像ジェネレーターを作成しようとしています。
画像を保存して同時に表示しようとすると、壊れた画像アイコン(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;