画像を取得するためのurlと、htmlを表示するためのurlを別々でやる方法
例) 画像表示
php
1// image.php
2$file_name = $_REQUEST['name'];
3$binary = "file_nameを元にDBから取り出したのバイナリデータ";
4header('Content-Type: image/png;'); // ブラウザにレスポンスを画像として扱ってもらう
5echo $binary;
※image/pngとなっている箇所は画像の形式にあわせて変えてください。
例) HTML表示
html
1<img src="image.php?name=sample.png">
この方法の注意点としては、アクセスが来てもこのままではキャッシュが効かないことです。headerでLast-Modifiedを返す、送られてきたリクエストのIf-Modified-Sinceを調べて適切に304 Not Modifiedを返すようにすればキャッシュが正しく働くようになります。あと、手抜きでContent-Length等も入れていないので、しっかりやるならそのへんのヘッダも正しく入れましょう。
直接HTMLにbase64エンコードした画像データを埋め込む方法
php
1<?php
2 $file_name = $_REQUEST['name'];
3 $binary = "DBから取り出したのバイナリデータ";
4?>
5<img src="data:image/png;base64,<?php echo base64_encode($binary); ?>">
※image/pngとなっている箇所は画像の形式にあわせて変えてください。
この方法の注意点としては、「HTMLに直接埋め込むためそもそもキャッシュが効かない」ということです。数kbのアイコン画像などではまだ許容されますが、あまり大きな画像をこの方法で埋め込むと通信量が相当な負荷になります。しかもbase64エンコードするのでバイナリが文字列へ変換され、本来のファイルサイズの2倍から3倍の大きさに膨れ上がります。さらにサイズ増加によりHTML本体のダウンロードに時間がかかるようになるため、ページ遷移にももたつきを感じるようになります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/09 02:44
2017/11/09 02:52