やはり画像はDBに格納することにした。
ユーザーをDBから削除する際に、アップされた画像も一緒に削除する処理書くのが面倒なので。
アップ時に、処理を諸々追加。
画像をアップする際に、事前にアップしたファイルを削除する。
アップする画像ファイルの容量に上限を設ける。
DBに格納したら、アップした画像は削除する。
次に、格納したファイルをDBから表示。
バイナリデータのため、そのままビューの方では表示できないので、コントローラーに表示機能を追加。
ビューからはアクションを呼び出す要領で表示。
imgタグのsrcに指定すればよい。
ここまでは特に問題なかったのだけど、リサイズして表示したいので、一部やり直し。
リサイズには、imagecreatefromjpegを使うが、バイナリデータだと使えない。
以下のように処理をする。
なお、GDライブラリが必要となる。
$imgsrc = XXXX; //データベースからバイナリデータを突っ込む。
$img = base64_encode($imgsrc);
$scheme = ‘data:application/octet-stream;base64,’;
これで、getimagesizeやimagecreatefromjpegが使えるようになった。
list($width,$height) = getimagesize($scheme . $img);
//縦横比を計算する。
$x = 120;
$y = $height/($width/$x);
$src=@imagecreatefromjpeg($scheme . $img);
$dst=imagecreatetruecolor($x,$y);
imagecopyresized($dst,$src,0,0,0,0,$x,$y,$width,$height);
$content_type = ‘Content-Type: ‘ . 画像のmime-typeを指定;
header($content_type);
imagejpeg($dst);
exit();
cronで定期的に途中で放り出された画像削除する処理も書かないと。
あと、アップされた画像には直リンクできないようにしないと。
今回初めてDBとPHPで画像いじったけど、色々面倒。
やっぱプラグイン使っておくべきだったかな・・・。
追記
上記の画像リサイズは、JPGしか対応していない。
PNGの場合はmageCreateFromPng、GIFの場合はimageCreateFromGifがそれぞれ必要。
mime-typeをで処理を切り分ける必要がある。