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.