リンクされた画像を取得し、imagecopyresampled() を使用してサイズを変更した独自のバージョンを作成しています。
GD ライブラリのリサンプル画像を表示しようとすると、特定のサイズ (幅約 160px) 未満の画像は意味のないものの束としてのみ表示されます (例: '����JFIF��>CREATOR: gd-jpeg v1.0 (IJG を使用) JPEG v62)、デフォルトの品質 ��C')。
画像自体を確認したところ、正常に保存され、画像ビューアーで開くと正しく表示されました。ただし、それらをブラウザに印刷するだけでは機能しません。ピクセル サイズをより大きなピクセル サイズに変更すると、正常に動作します。
このようにブラウザに画像を表示しています
$handle = fopen($fileName, "rb");
$img = fread($handle, filesize($fileName));
fclose($handle);
$imgSize = strlen($img);
$image_type = exif_imagetype($fileName);
header('Content-Type: image/JPEG');
header('Content-Transfer-Encoding: binary');
header("Content-Length: $imgSize");
print $img;
return true;
今、私はそれがGDライブラリと関係があると信じ始めています。他の誰かがこれについてさらに洞察を持っていますか?
ありがとう。
編集:
Brad の提案の 1 つが正しい方法を示してくれました。いつものように、それは完全に骨の折れる間違いでした。自分の質問にはまだ答えられないので、代わりに編集することにしました。
最初の説明に含めるのを忘れていたのは、前のコードはすべてモデルの 1 つにあり、コントローラーで画像を表示する関数を呼び出したことです。
私は最近 Symfony2 に切り替え、コントローラーのいたるところで Response リターンを使用しています。しかし、私は Symfony を使わずに書かれた古いショー画像コードを再利用していました。「画像を表示」タイプの関数をコントローラーで呼び出してから、空の応答を返しました。したがって、Symfony の Response リターンはエンコーディングを台無しにしました。高度なブラウザは、大きな画像は自動修正できましたが、小さな画像は自動修正できませんでした。
私の最終的な解決策は
私のモデルでは
$handle = fopen($fileName, "rb");
$image= fread($handle, filesize($fileName));
fclose($handle);
$image_type = exif_imagetype($fileName);
私のコントローラーで
return new Response($image, 200, array('Content-Type' => $image_type));