レビログ

レビログ

独断と偏見で、ありとあらゆる物(主にライトノベル・コミック・アニメ・Geekネタ)のレビューを偽った感想を書いてるBlog=レビュー+ブログ=レビログ
2006年1219

PHPでjpegの画像をDBを使って出し入れする方法

Webといえば便利言語の1つにPHPがある。PHPには画像サポートがあるのだが、その格納場所がファイルしか選択できない。

そこで、PHPを用いて、image変数をDBに格納したり、DBからimage変数に戻したりする方法のご紹介


イメージ変数からDBへ格納する

イメージ変数はたとえば
$image = imagecreatefromjpeg("");

$image = imagecreatefrompng("");
で生成することができる。
これはこのままではDBに格納するのはつらい。
imagejpeg やimagepngの出力は標準出力のみで変数にしまうことができない。

そこで、
標準出力のキャプチャ関数を使う
ob_start(); //キャプチャ開始
imagejpeg($image);//jpegのレンダリング
$jpegdata = ob_get_contents();//データーの取得
ob_end_clean();//キャプチャ終了

これで、任意のデータをファイルを介すことなく、変数に入れることができた。
あとは、このjpegdataをBLOB等を使いDBに格納するだけである。

プログラムに分岐を付けることで、
jpegファイルを読み込んで、加工してpngにしてDBに保存なども可能になる。

DBから直接image変数を作る

image変数の生成はファイルからしか対応していないので
image変数をDBから作ろうとすると、一度ファイルに落とすしかない。

しかし、これは、ハンドラーを作ることで回避できる。

stream_wrapper_register
このマニュアルにある
VariableStream を定義してやり
stream_wrapper_register("var", "VariableStream");
のように登録する。
すると、変数をファイルのように読み書きできるようになる。

あとは
たとえば、DBからデータを$jpegdataに取り出したとすると

$image = imagecreatefromjpeg ("var://jpegdata");

のように、変数をファイルのように扱わさせ、imagecreatefromjpeg を使って イメージ変数を作ればよい。


この方法はjpeg以外でも、pngなど他のイメージ変数にも使える。

DBとイメージ変数の連携

上記2つのハックを応用すると、かなりいろいろDBを使って遊べる。

特に検索してレンダリング系はファイルシステムを通さなくてもよくなるので便利な事もある。

もっとも、DBに負荷がかかるので、善し悪し




関連するエントリ一覧




other



■ 2006年12月19日 04:15  | トラックバック( 0 )件  | コメント( 0 )件
このエントリーを含むはてなブックマーク カテゴリ[HotTopic] [program)プログラム] 

トラックバック

このエントリーのトラックバックURL:

同じ作品に対するトラックバック歓迎中
言及リンクはしてくれると助かりますが、なくてもかまいません。


コメント一覧

心は萌え(管理人)(--)『

お気軽にコメント下さい。ただし、基本的に読んではいますが、お返事はほとんどしません。お返事が必要な方はTOPページにあるメールアドレスへメールを送って下さい。

 

コメントしてください




保存しますか?