【PHP】BMP画像をJpeg形式とWebP形式に変換

bmp_convert-to_jpeg_webpAndroidアプリから送信された画像がBMP形式なので、サーバー側でJPEGとWebPに変換したときの覚書。

環境: CentOS 7, PHP 7.0.16

 

目次

  1. AndroidとiOSのWebP対応状況
  2. サーバー環境の確認
  3. 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 >