BLOG 2018.02.16
CPI ACE01環境で画像アップロード機能を作る
伊藤
こんにちは。
オリジナルのCMSを作る場合、絶対に必要な機能の一つが画像アップロード機能です。
今回はその作り方を解説します。
環境はCPI ACE01の環境です。
初めに
まずは単純な画像アップロード機能を作りましょう。
今回は色々な説明を吹き飛ばして、単純な画像アップロード関数を作ります。
フォームからアップされた画像ファイルをフォルダにアップします。
$file = $_FILES["form_image"];
imguploader($file);
function imguploader($temp_file){
if(preg_match('/\.gif$|\.png$|\.jpg$|\.jpeg$/i', $temp_file["name"])){
$add_img=$temp_file["name"];
move_uploaded_file($temp_file["tmp_name"], "../gallery/" .$add_img);
$result = $add_img;
}else{
$result = "failed";
}
return $result;
}
画像アップを作るだけなら結構シンプルです。
まず、フォームから画像ファイルを受け取り、それらが画像ファイルであるかどうかを確認します。
その後、$move_uploaded_file関数を用い、指定のフォルダに格納。
ね、簡単でしょ?
思わぬ落とし穴
落とし穴は存在するもので、上記のアップロードには画像処理が入っていません。
例えば、利用者が大きな画像を入れてしまったりすると、ページが重くなったりすることが考えられます。
また、iPhone等で撮影された、exif情報が特殊な画像をアップロードすると画像が変な方向になってしまいます。
とはいえ、画像処理は一から作ると結構大変です。
gd関数というものがあるのですが、こちらも書く内容が多く、面倒くさいです。
ここで役に立つのが、「ImageMagick」です。
ImageMagickを用いて画像処理を行う
ImageMagickはPHPで使用することができる画像処理ソフトウェアであり、多くのレンタルサーバーでも使用できます。
例えば、CPI ACE01ではphp.iniに以下のように記入することで使用可能になります。
extension=imagick.so
上記を踏まえ、関数部分に変更を行ったものが以下のコードです。
function imguploader($temp_file){
if(preg_match('/\.gif$|\.png$|\.jpg$|\.jpeg$/i', $temp_file["name"])){
$add_img=$temp_file["name"];
move_uploaded_file($temp_file["tmp_name"], "../gallery/" .$add_img);
//ここから追加
$changeimg = "../gallery/$add_img";
list($width,$height) = getimagesize($changeimg);
if($width >= 1921){
$imgchanger="/usr/local/bin/mogrify -auto-orient -resize 1920x -quality 80 $changeimg";
exec($imgchanger);
exec('mogrify',$out);
}else{
$imgchanger="/usr/local/bin/mogrify -auto-orient -quality 80 $changeimg";
exec($imgchanger);
exec('mogrify',$out);
}
//ここまで追加
$result = $add_img;
}else{
$result = "failed";
}
return $result;
}
方法としては、一度アップロードした画像を上書き保存するという形になります。
$changeimgで、アップロードしたばかりの画像ファイルのパスを指定。
そして、大きな画像だった場合のみリサイズを行いたいので、サイズも取得します。
サイズの取得が完了したら、コマンドラインからImageMagickの機能を実行します。
“/usr/local/bin/~”;と書くことで準備が可能で、今回の場合は以下の内容を盛り込んでいます。
【mogrify】既存ファイルを上書きしますよ~という記述です。
【-auto-orient】exif情報がついた写真の向きを補正してくれます。
【-resize 1920x】画像サイズを横1920基準でリサイズします。(画像サイズ1921以上のときのみ記述)
【-quality 80】画質を80%に落とします。
他にも様々な機能があるので、気になる方は以下のサイトをおすすめです。
ImageMagick コマンドリファレンス
http://image-magick.com/
これで、通常通り使う場合において、困ることは少なくなると思います。
最後にexec関数で、$imgchanger変数の中身を実行、これでアップされたファイルはリサイズされると思います。
まとめ
ImageMagickを使うことで、画像処理を簡単に行うことができます。
アップロード後の処理にお悩みの方はぜひ使ってみてください!