imagecreatefromstring (PHP)



画像ファイルをバイナリデータとしてデータベースなどに保存した場合、下記のようにヘッダを加え、保存したデータを加えると、画像ファイルそのものをブラウザに出力することができます。

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件のフィードバック

コメントを残す

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

SPAM防止のため数字と漢数字の算数の計算をお願いします。 * Time limit is exhausted. Please reload CAPTCHA.