CakePHP画像リサイズ最強プラグインUploadPackをCake初心者でも分かるよう徹底解説
その他オプション
その他にも便利なオプションが用意されています。
バリデーションと、サムネイルサイズや、ファイルのパスの変更などやってきましたが、このほかにも便利なオプションが用意されています。
デフォルト画像の設定
もしかしたら画像を登録しないケースもあるかもしれません。そんな時はデフォルト画像が設定されるようにも出来ます。
var $actsAs = array( 'UploadPack.Upload' => array( 'img' => array( 'default_url' => 'path/to/default/image' ) ) );
もしもアップロード画像がmaxWidthを超えてしまったら
バリデーションでmaxWidthについて紹介しましたが、maxWidthを超えた画像がアップロードされた場合、元画像をmaxWidthに合わせてリサイズしてアップロードすることも出来ます。
var $actsAs = array( 'UploadPack.Upload' => array( 'img' => array( 'resizeToMaxWidth' => true ) ) );
JPEG Quality
画像のクオリティーも設定出来ます。リサイズする際に画像は圧縮されるわけですが、最大値100で、数値が大きければ大きいほど綺麗に画像を保存してくれますが、その分ファイルサイズは重たくなります。
var $actsAs = array( 'UploadPack.Upload' => array( 'img' => array( 'quality' => 95 ) ) );
○○_file_name以外のフィールド名で設定したい
元々UploadPackで作っていなかったところに後から導入したら当然フィールド名は異なるわけなので、この場合○○_file_name以外のフィールド名でも設定出来るようです。
var $actsAs = array( 'UploadPack.Upload' => array( 'img' => array( 'urlField' => 'Your field name' ) ) );
本当にたくさんのオプション設定があって、画像アップローダーとしては最強のUloadPack。ただ、画像データは元ファイルの名称しか入らず、そこだけは苦労しました。
ですので、私は画像登録後、データをUpdateする形で「画像のパス+新しい画像名」を保存します。
if($this->data['Image']['img']['error']==0){ $this->Image->saveField('img_file_name', '/YourPath/'); }
また、UploadPackではIDごとにフォルダを分散させるか、idと同じ名称のファイル名にして保存するしかありません。しかしこれだと大量にフォルダ、ファイルが乱立してしまい管理上だけでなく 速度面でもよくありません。
そこでよく対応する方法としては以下のようにidを任意の桁数で0埋めしてからスライスして画像を保存させます。
$cont_id = sprintf("%08d", $id); $dir1 = substr($cont_id, 0, 2); //0埋めしたIDをスライスして、ディレクトリID 1000ファイルごとにディレクトリ分散 $dir2 = substr($cont_id, 2, 3); //一応これで、99999999以上は余裕でいけます。 $file = '/home/example.com/public_html/app/webroot/img/banner/'.$dir1.'/'.$dir2.'/'.$cont_id;
しかし、そこまでの設定はUploadPackには無いので、一度画像を登録してから最後に自分のオリジナルのディレクトリにファイルを移動させるようなことを処理として行っています。(今回はUploadPackの解説なので、それはまた次の機会に。)