画像ファイルをバイナリデータとしてデータベースなどに保存した場合、下記のようにヘッダを加え、保存したデータを加えると、画像ファイルそのものをブラウザに出力することができます。
header("Content-Type: image/jpeg");
そのとき、何らかの処理をしたい場合は imagecreatefromstring を使うと便利です。本来であれば、テンポラリファイルを作成、加工、出力、テンポラリファイル削除、といった手順が必要になりますが、その手間を省くことができます。 テーブル名:TABLE、項目名:JPEG、ID:123の画像を横幅100pxに縮小して表示する場合の例です。
<?php $id = 123; $size = 100; //jpegとして出力 header("Content-Type: image/jpeg"); *データベースに接続する処理* $sql = "select jpeg from TABLE where id = $id"; $result = mysql_query($sql); if (!$result) { print("SQLの実行に失敗しました"); print(mysql_errno().": ".mysql_error()); exit; } $row = mysql_fetch_row($result); $image = imagecreatefromstring($row[0]); mysql_close($con); // 画像のサイズを取得。 $width = ImageSX($image); //横幅(ピクセル) $height = ImageSY($image); //縦幅(ピクセル) // 縮小した画像のサイズを決める。 $new_width = $size; $rate = $new_width / $width; //縮小比率 $new_height = $rate * $height; // 空の画像を作成する。 $new_image = ImageCreateTrueColor($new_width, $new_height); // サンプリングしなおす。 ImageCopyResampled($new_image,$image,0,0,0,0,$new_width,$new_height,$width,$height); //出力ImageJPEG($new_image ,"", 60);ImageJPEG($new_image ,NULL, 60); //3つ目の引数はクオリティー(0~100) imagedestroy ($new_image); //縮小したイメージIDの破棄 imagedestroy ($image); //元イメージIDの破棄 ?>
このようにして、その後、縮小や、加工をすることができます。
2014/7/7追記。ImageJPEGの第2引数はNULLに訂正。メモはこちら。
「imagecreatefromstring (PHP)」への1件のフィードバック