PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

【PHP】データURIを使ってバイナリデータから画像を再作成・表示する方法

データURIとは?バイナリデータから画像を表示する仕組み

PHPでは、imgタグのsrc属性に「データURI」を指定することで、バイナリデータから画像を再作成してブラウザ上に直接表示できます。画像ファイルをサーバーのディスクに保存する必要がないため、動的に生成した画像をそのまま出力したい場合などに非常に便利な手法です。

データURIの基本フォーマット

data:[<MIME-type>][;charset="<encoding>"][;base64],<data>

「data:」の後にMIMEタイプ(例:image/png)とエンコーディング情報を指定し、カンマに続けてbase64エンコード済みのデータ本体を記述するという構造になっています。

実装コード例

<?php
   function data_uri($file, $mime) {  
      $contents = file_get_contents($file);
      $base64   = base64_encode($contents);
      return ('data:' . $mime . ';base64,' . $base64);
   }
?>
<img src="<?php echo data_uri('some_image.png','image/png'); ?>" alt="Image sample" />

コードの解説

data_uri() 関数は、まず file_get_contents() で対象ファイルの内容(バイナリデータ)を読み込み、変数 $contents に格納します。続いて base64_encode() を使ってこのデータをbase64形式へエンコードし、「data:」で始まる完全なデータURIとして返却します。

この関数に画像ファイルのパスとMIMEタイプを渡して呼び出すことで、画像をbase64エンコードされたデータURIに変換し、imgタグのsrc属性にそのまま埋め込んで表示できるのです。

メリットと注意点

主なメリット: 処理後の画像をディスクに保存せずに済むため、一時的な画像や動的生成画像の扱いがシンプルになり、ファイル管理の手間も省けます。

一方で注意点もあります。base64エンコードを行うとデータサイズが約1.3倍に増加するため、大きな画像や多数の画像を埋め込むとページの読み込み速度に影響が出る可能性があります。アイコンやバナーなど、比較的小さな画像のインライン表示に使うのが効果的です。

  1. PHP – exif_read_data()関数の使い方を徹底解説

    PHPのexif_read_data()関数は、画像ファイルからEXIF(Exchangeable Image File Format)ヘッダーを読み取るための関数です。この関数を使うことで、画像ファイルに埋め込まれたすべてのEXIFヘッダー情報を抽出できます。 構文 Array exif_read_data( str $file, str $section=null, bool $arrays=false, bool $thumbnail=false ) パラメータ exif_read_data()関数は、以下の4つのパラメータを受け付けます。 $file − 画像

  2. PHPのimageflip()関数の使い方とサンプルコード

    imageflip()関数は、指定されたモードに従って画像を反転させるために使用されるPHPの組み込み関数です。水平方向、垂直方向、あるいはその両方への反転が可能で、画像処理を行う際に非常に便利な機能です。 構文 bool imageflip(img, mode) パラメータ img: imagecreatetruecolor()などの画像作成関数によって生成された画像リソースを指定します。 mode: 反転のモードを指定します。指定できる値は以下の3種類です。 modeに指定できる値 IMG_FLIP_HORIZONTAL:画像を水平方向(左右)に反転します。 IMG_FLIP_VER