LoginSignup
1
0

More than 5 years have passed since last update.

CakePHP2.x ファイルアップロード時に画像のロスレス圧縮

Posted at

はじめに

WEBコンテンツのシステムに携わるとSEO対策は必須なわけで
CMSを導入しているシステムでは画像のアップロードをCMS上から行うというのも普通で
今後自分でも使う場面が多そうなので備忘を兼ねて残します。

環境

AWSのLinux
PHP 5.6
jpegoptim
optipng

準備

圧縮で使用するためにjpegoptimとoptipngをサーバ上にインストールします。

yum -y install libjpeg
yum install --enablerepo=epel jpegoptim optipng

Component作成

ImageCompressComponent.php
<?php

App::uses('Component', 'Controller');

class ImageCompressComponent extends Component {

    private $_jpegQuality = 80;
    private $_pngQuality = 2;

    public function setJpegQuality($val) {
        $this->_jpegQuality = $val;
    }

    public function setPngQuality($val) {
        $this->_pngQuality = $val;
    }

    /**
     * 圧縮の実行
     * @param type $file 圧縮を行うファイルの情報
     */
    public function compress($file) {
        if ($file["error"] != 0) {
            return false;
        }
        switch ($file['type']) {
            case 'image/png' :
                $command = "/usr/bin/optipng -strip all -o{$this->_pngQuality} ";
                break;
            case 'image/jpeg' :
                $command = "/usr/bin/jpegoptim -m{$this->_jpegQuality} -o --strip-all ";
                break;
            default :
                //圧縮に対応していない形式
                return false;
        }

        exec($command . $file["tmp_name"], $msg, $status);
        if ($status != 0) {
            return false;
        }

        return true;
    }

}

後はComponentをController側から使用するだけです。

hogeController.php
$this->ImageCompress->compress($image);

これをAWSのS3バケットにアップする前に圧縮を行うことで、圧縮した画像をS3に保存することができました。

参考文献

実装にあたりこちらのサイト様を参考にさせていただきました。
a-blog cmsで画像のロスレス圧縮をする | a-blog cms | Web雑記帳

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0