POSTで送信された画像を、リサイズして、DB(MySQL)にBLOB型で格納しようと考えています。
リサイズした画像のバイナリデータが取得できず、困っています。
//画像を取得して、GDで適当に縮小
$upload_img = ImageCreateFromJPEG( $_FILES['file']['tmp_name'] );
$width = ImageSx($upload_img);
$height = ImageSy($upload_img);
$resized_img = ImageCreateTrueColor($width/2, $height/2);
ImageCopyResampled($resized_img, $upload_img, 0,0,0,0, $width/2, $height/2, $width, $height);
//DBにinsertする画像データの取得?
$insert_img = file_get_contents(ImageJPEG($resized_img));
GDのImageJPEGを使用すると、ブラウザに出力されてしまいました。
DBに挿入できる画像データの取得の仕方を教えてください。よろしくお願いします。
出力をバッファリングする。
<?php ob_start() ; imagejpeg($resized_img) $insert_img = ob_get_contents() ; ob_end_clean() ; ?>
いったんテンポラリ・ファイルにセーブしてはどうでしょうか。
$tmpname = tempnam("/tmp", "hogehoge"); imagejpeg($resized_img, $tmpfname); $insert_img = file_get_contents($tmpfname); unlink($tmpfname);
素直に画像は画像ファイルとして保存しておけばDBも重くならずに良いと思うのですが。。。
全くその通りです。
でも、なるべく公開フォルダに生のファイルを置きたくないんです。その理由はお察しで。
どうしても手がなければ、一時保存して逐次削除する手ですね。