ブログ

BLOG 2018.02.16AIブログ , PHP , ウェブ制作

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を使うことで、画像処理を簡単に行うことができます。
アップロード後の処理にお悩みの方はぜひ使ってみてください!

Tweet Share RSS

関連記事