PHP | GDでjpegやPNGファイルをWebPに変換する方法
PHPのGDライブラリでjpeg画像やpng画像をWebPファイルへ変換する方法の紹介です。
サーバーのPHP-GDライブラリがWebPに対応している必要はありますが、利用方法は他ファイルタイプと同様にimagecreatefromwebp()やimagewebp()として使えるので、一度でもGDライブラリを使ったことのある人であれば、なんとなくで簡単に実装できそうです。
GDでjpegやPNGファイルをWebPに変換
下地画像データを作成なしで、imagecopyresampled()などを使わずそのまま変換する方法です。
//元画像ファイル
$file = 'sample.png';
//元画像ファイルのタイプで分岐処理
switch (mime_content_type($file)) {
case 'image/jpeg':
$img = imagecreatefromjpeg($file);
break;
case 'image/png':
$img = imagecreatefrompng($file);
break;
case 'image/webp':
$img = imagecreatefromwebp($file);
break;
default:
break;
}
//ファイル名を指定して元画像データからWebP画像を作成
imagewebp($img, 'new.webp');
imagewebpのパラメータ引数の説明
imagewebp(画像データ, 作成するファイルパス. 品質);
imagewebp()の品質(quality)は、0~100の間で設定します。
デフォルトは80、0に近いほど低品質で100が最高品質です。
imagejpeg()などのほかのフォーマットと同様に、imageWebp()やimageWEBP()など、大文字を含ませても機能します。
また、この方法では、gifからWebPへの変換では「Paletter image not supported by webp」とエラーが出て、変換できないことが確認できています。
現状、静止画のgif画像を変換するケースは少ないと思いますが、gif画像からの変換に対応したい場合や、リサイズ機能も含めたい場合は、下地画像を作成して元画像を重ねるする次の方法を利用します。
//元画像ファイル
$file = 'sample.png';
//元画像ファイルのタイプで分岐処理
switch (mime_content_type($file)) {
case 'image/jpeg':
$img = imagecreatefromjpeg($file);
break;
case 'image/png':
$img = imagecreatefrompng($file);
break;
case 'image/gif':
$img = imagecreatefromgif($file);
break;
case 'image/webp':
$img = imagecreatefromwebp($file);
break;
default:
break;
}
//ベース画像を作成して、元画像を重ねる
$new_img = imagecreatetruecolor($w, $h);
imagecopyresampled($new_img, $img, 0, 0, 0, 0, $w, $h, $w, $h);
//ファイルのフォーマットを指定して保存
imagewebp($new_img, 'new.webp');
サンプルではリサイズなしなので、ベース画像のサイズは元画像のサイズと同じにして作成しています。
imagecopyresampled()のパラメータ引数の簡単な説明
imagecopyresampled(ベース画像, 元画像, ベース画像のx座標, ベース画像のy座標, 元画像のx座標, 元画像のy座標, ベース画像の幅, ベース画像の高さ, 元画像の幅, 元画像の高さ);
ディスカッション
コメント一覧
まだ、コメントがありません