【PHP】BMP画像をJpeg形式とWebP形式に変換
Androidアプリから送信された画像がBMP形式なので、サーバー側でJPEGとWebPに変換したときの覚書。
環境: CentOS 7, PHP 7.0.16
目次
- AndroidとiOSのWebP対応状況
- サーバー環境の確認
- PHPのImagickを使って変換
1.AndroidとiOSのWebP対応状況
Androidは4.0以上でWebPに対応している。
iOSはiOS 10のSafariで対応しているが、アプリで表示させるためには別途ライブラリが必要。
iOSはjpeg、Androidはwebpを表示することにした。
2.サーバー環境の確認
YUM経由でImageMagickは前にインストールしてあったので、バージョンと対応フォーマットの確認
# convert --version
Version: ImageMagick 6.9.8-0 Q16 x86_64 2017-03-12
# convert -list format
WEBP* WEBP rw- WebP Image Format (libwebp 0.3.0[0201])
PHPから利用するためのimagickライブラリがあるか確認
# php -i | grep imagick
imagick module version => 3.4.3
3.PHPのImagickを使って変換
BMPからJPEGに変換するサンプルコード
$info = pathinfo($path);
$image = new \Imagick($path);
$image->setImageFormat('jpeg');
// Save as progressive jpeg
$image->setInterlaceScheme(\Imagick::INTERLACE_PLANE);
$image->setImageCompressionQuality(80);$result_path = $info['dirname'] . '/' . $info['filename'] . '.jpg';
$image->writeImage($result_path);
$image->clear();
$image->destroy();
WebPに変換するサンプルコード
$info = pathinfo($path);
$image = new \Imagick($path);
$image->setImageFormat('webp');
$image->setImageCompressionQuality(80);$result_path = $info['dirname'] . '/' . $info['filename'] . '.webp';
$image->writeImage($result_path);
$image->clear();
$image->destroy();
Androidアプリで画像を表示するのが段違いに速くなった。iOSだとBMPでも表示が速かったので気付くのが遅れた。
アプリはこちら。
< Related Posts >