はじめに
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雑記帳