PHP

【PHPで簡単】データベースに保存されたBLOB画像を表示する方法

2022年2月2日




データベースに画像を保存する際に、BLOB形式で保存されることがあります。

BLOB形式とは、データベースなどでバイナリデータを格納する際のデータ型のことを言います。

なのでBLOB画像というと、テキストデータ以外の「0」と「1」の組み合わせ(「on」と「off」の組み合わせ)で表現される画像データということになります。

このあたりは難しくてイマイチ分からない部分もありますが、とにかくDBへの画像保存の方法のひとつと捉えております(笑)

難しい話はさておき、今回は「BLOB画像をPHPで出力するコード」を記録しておこうと思います。

BLOB形式の画像があるデータベースのイメージ

データベースから取り出したBLOB形式の画像を表示する

#データベース接続プログラム
 $dsn = 'mysql:dbname=test;host=localhost;charset=utf8';
 $user = 'root';
 $password = '';
 $dbh = new PDO($dsn,$user,$password);
 $dbh->query('SET NAMES utf8');

#sql文(inにてtest_idが1,2,3のいずれか一致するphotoを抽出します)
$sql ="SELECT photo FROM `test_info` WHERE test_id in(1,2,3) "; 
$stmt = $dbh -> prepare($sql);
$stmt->execute();

 while(1){
   $rec = $stmt->fetch(PDO::FETCH_ASSOC);
      if($rec==false)
       {     
           print('ありません');
           break;
        }
      $img_src = "data:image/jpeg;base64," . $rec['photo']; 
      print' <img src="'. $img_src . '" class="topimage" alt="top"/>';

        }
      $dbh = null;

sql文でデータベース内の「photo」を抽出します。
「photo」には最初に画像で示したようなBLOB形式で画像が格納されています。
そのため、そのままでは表示されません。
imgタグにて表示する前に、
取り出したBLOB→base64にエンコード というステップが必要になります。


簡単!下記が該当の行です。

$img_src = "data:image/jpeg;base64," . $rec['photo']; 
print' <img src="'. $img_src . '" class="topimage" alt="top"/>'

今回は、jpeg画像として出力したいので、jpegを指定しています。
(もちろんpngなどの指定も可能です)

BLOB画像が表示されないとき

ブラウザの検証画面で該当のimgタグを確認してみます。

<img src="aaaBBCCC123…">

というような英数字がたくさん並んでいれば、おそらく出力に成功しています。
この場合は、
widthとheightを指定すると表示されることがあります。

(私はこれに数時間悩みましたww)

print' <img src="'. $img_src . '" width="100vw" heigth="auto" class="topimage" alt="top"/>'

相談・質問を募集しています。

記事に関する相談・質問を募集しています。

是非この機会にどうぞ
コメントでの質問も大歓迎です!

ハヤぶろぐのLINE@登録はこちら


メールの方はこちら




-PHP