PHP Thumbnailer Class v2.0でmimetypeを判別する
symfonyでアップロードされた画像ファイルのサムネイル生成を行うために、sfThumbnailPluginを使ってやってみたけど、 正方形切り抜きができなさそうなのでもう少し高機能な感じのPHP Thumbnailer Class v2.0を使うことにしました。
とりあえず、PHP5用のをダウンロードして「SF_ROOT_DIR/lib/vender/php5_thumbnail_v2」に「thumbnail.inc.php」を「thumbnail.class.php」にリネームしてコピー。
あとは「symfony cc」でキャッシュをクリアして準備完了。
とりあえず使ってみる。
<?php if($this->getRequest()->getFileName('image')) { $savename = md5(uniqid(rand(0,1))); $size = 100; // 100x100の正方形 list($width, $height) = getimagesize($this->getReqest()->getFilePath('image')); $thumbnail = new Thumbnail($this->getReqest()->getFilePath('image')); $thumbnail->resizePercent(max($size/$width, $size/$height)*100); $thumbnail->cropFromCenter($size); $thumbnail->save(sfConfig::get('app_thumbnail_dir') . '/' . $savename); }
という感じで100x100のサムネイルを作成しようとしたのですが「Unknown file format」とかでてエラー。
ソースみるとファイルの拡張子でファイルタイプを判別しようとしてるっぽい。
アップロードされたファイルは「/tmp/xxxxxx」とかいう拡張子なんて無いファイルなので「Unknown file format」って、もう少し努力してください。
とりあえず以下のようにソース書き換え
<?php // thumbnail.class.php 132行目付近 //if there are no errors, determine the file format if($this->error == false) { $fileinfo = getimagesize($this->fileName); switch($fileinfo['mime']) { case 'image/jpeg': case 'image/pjpeg': $this->format = 'JPG'; break; case 'image/gif': $this->format = 'GIF'; break; case 'image/png': $this->format = 'PNG'; break; default: // check if gif if(stristr(strtolower($this->fileName), '.gif')) $this->format = 'GIF'; // check if jpg elseif(stristr(strtolower($this->fileName), '.jpg') || stristr(strtolower($this->fileName), '.jpeg')) $this->format = 'GIF'; // check if png elseif(stristr(strtolower($this->fileName), '.png')) $this->format = 'GIF'; // unknown file format else { $this->errmsg = 'Unknown file format'; $this->error = true; } } }
これで一応使えるようになったぽい。