BLOBに格納した画像データを複数展開する

2020-03-25

画像1つを返すPHPを作成し、AjaxでPHPを連続読み込みすることで
複数の画像を1ページに展開することが可能ではあるが、
Base64を使いPHP1つのみで複数展開する方法を記載する。

$results = $db->query('SELECT image FROM item');

while ($row = $results->fetchArray()) {
	$img = $row['image'];
	$img = base64_encode($img);

	echo "<img src="data:image/png;base64," . $img . "">";
}

SQLにてimage列(BLOB)のデータを取得後、
取得した画像データを、base64_encode でBase64エンコードを行う。
imgタグのsrcに、「"data:image/png;base64,"」+Base64エンコードした文字列を格納。
Jpegの場合は「"data:image/jpg;base64,"」等、画像形式によって文字列が変わるので注意。
複数の画像種別が混在する場合は、exif_imagetype を用いてImageTypeを判定するとよい。

なお、上記方法はPHPだけでなく、静的なHTMLにおいても同様な記載が可能。
ただし、バイナリデータがHTML内に直接記載される為、
大量の画像及びサイズの大きい画像にはあまり適さない。