PHPでjpg / png画像をWebP画像に変換し保存する方法
2024/01/12
PHPでjpg / png画像を圧縮したかった。ただjpg / pngのままだとそこまで圧縮できず、最近だとWebPというファイル形式が圧縮率が高いらしい。なのでjpg / png画像をWebP画像に変換し、保存したかった。以下に対応方法をメモ。
WebP画像とは
Google公式の画像形式で圧縮率が高い。読み方は「ウェブピー」ではなく「ウェッピー」とのこと。発表されたのは2010年と結構古いが当時は対応ブラウザが限られていた。最近では主要ブラウザで対応している。
GDライブラリが必要
変換する際にPHPのGDライブラリが必要。テスト環境がPHP7.4だったので以下でインストールした。
yum install --enablerepo=remi-php74 php-gd
ソースコード
$file = './001.jpg';
changeWebP($file);
function changeWebP( $file ){
$path_parts = pathinfo($file);
$ext = $path_parts['extension'];
if( $ext == 'jpg' ){
$old_img = imagecreatefromjpeg($file);
}else if( $ext == 'png' ){
$old_img = imagecreatefrompng($file);
}else{
return false;
}
imagewebp($old_img, $path_parts['filename'] . '.webp');
}
imagewebp関数の第3引数で変換時のクオリティ(画像の綺麗さ)を0~100までの半角数値で指定できる。指定しない場合は100となる。
圧縮具合はどうか?
542KBのjpg画像をクオリティ100で変換した場合は401KBに、クオリティ50で変換した場合は246KBに圧縮された。
imagewebp関数リファレンス
https://www.php.net/manual/ja/function.imagewebp.php
所感
実際はファイルアップロード→WebPに変換して保存という形になる思われるので、ソースコードはちょっと改変が必要そう。
関連記事
-
-
Lightboxで画像拡大時にダウンロードリンクを設置する方法
Lightboxで画像拡大時にダウンロードリンクを設置したいと要望を受けた。もち ...
-
-
PHPで画像にモザイクをかけて保存
やりたかった事はPHPで ・モザイク処理 ・元の画像とは別にファイル名をつけて保 ...
-
-
Gif画像に再生ボタンを設置し、ユーザーの操作により再生⇔停止が行える「gifffer」ライブラリの利用方法
あるページにGif画像を設置し、当該画像が表示されても自動再生させず、再生ボタン ...
-
-
画像アップロード前の時点で画像が選択されているか確認
やりたかった事は、フォーム内で画像をアップロードする際、 ちゃんと画像がローカル ...
-
-
画像をアップロードすると複数サムネイルを生成する方法
フォームで画像をアップロードすると、予め定めておいた大中小のサイズでサムネイル画 ...