[php] base64エンコードされたデータの画像をphpで直接表示する方法

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

こんにちわ。
 

全食カレーでもOKなぐらい、カレー好きな、下駄です。
 

「base64」とかけまして、
 

「海外映画」と、ときます。
 

そのココロは・・・
 

文字を表示して、問題なく便利に見えるようにします。

base64は便利?

画像ファイル名をimgタグのsrc属性に入れる通常の使い方では、htmlファイルを読み込んだ後に、imgファイルの読み込みが発生するために、サーバーアクセスは、imgファイルの数だけ増えます。
 

もちろん、scriptタグもlinkタグも同じことが言えるのですが・・・
 

こうしたサーバーアクセスを減らす事で、webページの表示が思いの外早くなる事は、普通に考えると分かるのですが、そこで使えるのが、base64エンコードされた画像データです。
 

phpなどで”base64_encode(ファイル名)”としたり、linuxサーバーで”base64 ファイル名”とするだけで、簡単にファイルをbase64エンコードできます。
 

そのエンコードした値を下記のようにすることで、htmlファイルに埋め込むことが可能です。
 

 

でも、画像データを文字列であるbase64データに変換すると、容量が1.5倍ぐらいに膨らんでしまいます。
 

サーバーアクセス数は減らせるけれど、トラフィックボリュームは増えてしまうというジレンマもありますね。
 

同じ画像を複数ページ内で表示しようとすると、base64はデータ容量が大きくなりすぎてしまうために、逆に非効率になってしまう事も考えられます。
 

もちろん、javascriptを使って、ページ内にライブラリとして読み込んだbase64画像データを、適材適所に配置(コピー)する処理を行っても良いのですが、少ししんどいページになることは間違いありません。
 

base64データをデコードして使わなければいけない状況発生

そんな事を調べている中で、base64データをimgタグに記載されたphpの内部での出力で、画像表示をしなければいけない状況が発生しました。
 

どういう状況なのかというと、gitリポジトリの中のデータをcat-fileで取り出して、画像ファイルの場合はバイナリデータになってしまうので、テキストでやり取りするために、一旦base64エンコードをして受け渡しをします。
 

その後、そのデータを受け取ったphpで、表示をするのですが、imgタグに書き込むbase64の記述をどうやってもうまく表示されません。
 

それもそのはず、imgタグ内のbase64は、モードを切り替えて表示しているので、phpファイルにアクセスしたら、ちゃんとバイナリで返してあげなければいけません・・・
 

 

凡ミス発見!無事に解決

ContentTypeやheader記述などをいくら変えてもうまく表示できません。
&nbs;

でも、問題解決は、突然やってきます。
 

受け取ったbase64エンコードデータをデコードするだけで良かったんですね・・・
 

アホでした。
 

 

なんとこれだけで解決でした・・・
 

アホな自分に乾杯!

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です