ウシヲシュトスル

アクセスカウンタ

zoom RSS バイナリデータのイメージサイズを変更(PHP+MYSQL)

<<   作成日時 : 2006/11/01 18:18   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 5 / トラックバック 3 / コメント 0

バイナリデータとしてMYSQLに格納した画像データをリサンプリングしながらサイズを変更して表示させる方法の忘備録。

まずは、変更元のイメージデータがバイナリデータでなくGIFやJPEGやPNGなどの画像ファイルだった場合。

PHPでイメージ操作関数を利用するには、GDモジュールがインストールされている必要がある。(PHP4.3.0からは標準で組み込まれるモジュールになっている)

sample.php (例)画像サイズの縦横を半分に変更

<?php
$imgpath = "../image/hoge.gif"; // 画像を指定
$im_info = getimagesize($imgpath); // サイズを取得
$src_im = imagecreatefromgif($imgpath); // 元イメージ
$dst_im = imagecreate($im_info[0]/2,$im_info[1]/2); // 新しいイメージ
imagecopyresampled($dst_im,$src_im,0,0,0,0,
              $im_info[0]/2,$im_info[1]/2,$im_info[0],$im_info[1]);
imagejpeg($dst_im);
exit;
?>


GDモジュールが使えればサイズの変更は上記の通りでOK。

次に問題のバイナリデータの画像サイズを変更する指定する方法。
バイナリデータを $imgpath に直接値を代入することが出来ないので、まずは画像を表示するプログラムを作成してそのファイルを指定する。


image.php(DBに格納された画像を表示するページ)

<?php
// 画像IDを取得
$img_id= $_POST["id"] ? $_POST["id"] : $_GET["id"];

// DBへ接続
$conn= mysql_connect($srv,$user,$passwd) or die("ERROR\n");
mysql_select_db($db) or die("ERROR\n");

// パラメータのチェックなどは省略
$strsql = "SELECT * FROM table WHERE id={$img_id}";
$rs = mysql_query($strsql);
if($rs){
 $row = mysql_fetch_array($rs);
 $imgtype = $row["imgtype"]; // イメージタイプを格納
 $imgdata = $row["imgdata"]; // イメージデータ

 // ヘッダーの送信
 header("Content-type: ".$imgtype );
 echo(base64_decode($imgdata ));
 mysql_free_result($rs);
}
mysql_close($conn);
exit;
?>

ん?base64_decode?
この部分は随分昔に作ったので、何故base64_decodeをしているかは失念。
不要かも。

そして、sample.phpを修正。

<?php
// 画像IDを取得
$img_id= $_POST["id"] ? $_POST["id"] : $_GET["id"];
$imgpath = "./image.php?id={$img_id}"; // 画像を指定

$im_info = getimagesize($imgpath); // サイズを取得
$src_im = imagecreatefromgif($imgpath); // 元イメージ
$dst_im = imagecreate($im_info[0]/2,$im_info[1]/2); // 新しいイメージ
imagecopyresampled($dst_im,$src_im,0,0,0,0,
              $im_info[0]/2,$im_info[1]/2,$im_info[0],$im_info[1]);
imagejpeg($dst_im);
exit;
?>


sample.php のファイル指定部分をimage.phpに変更。


それで、IMGタグでsample.phpを呼び出してあげればOK!
もっとスマートは方法があるかも知れないがとりあえず完成。

【テーブル構造】
id INT 画像No(プライマリーキー)
size INT ファイルサイズ
imgtype VARCHAR(250) ファイルタイプ
width INT 画像横幅
height INT 画像高さ
imgdata BLOB 画像データ

【備考】
.htaccessによるBASIC認証を使用していると正常動作しない。
このサンプルでは相対パスでファイルを指定しているが、実際には絶対パスで動作確認。

【お約束】
・間違いがあったらゴメンナサイ。
・細かな処理は省略省略しています。
・この記事を参考にされて発生したいかなる損害も一切責任を負いません。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 5
なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
ナイス ナイス

トラックバック(3件)

タイトル (本文) ブログ名/日時
質問:データベースに画像を格納ってどう思う?
このブログに「mysql php blob 画像表示」とか「バイナリ 画像 DB」などというキーワードでサーチエンジンからアクセスしてくる方が大勢いらっしゃいます。 ...続きを見る
ウシヲシュトスル
2007/12/20 11:13
画像アップロード(MYSQL + PHP)
今回は画像アップロードしてデータベース(MYSQL)に登録する方法をご紹介します。 というのも、普段はバイクネタやうんちネタやヘヴィメタネタなどが多い当ブログですが、以前に書いた「バイナリデータのイメージサイズを変更(PHP+MYSQL)」というページがどうやら意外に人気があるようです。 ...続きを見る
ウシヲシュトスル
2008/02/29 11:20
【備忘録】ベーシック認証に直接アクセスするURL
ベーシック認証の掛かったサイトにダイアログで認証を求められることなく直接アクセスするURLの記述方法。 ...続きを見る
ウシヲシュトスル
2008/07/01 18:04

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
バイナリデータのイメージサイズを変更(PHP+MYSQL) ウシヲシュトスル/BIGLOBEウェブリブログ
文字サイズ:       閉じる