勉強したことのメモ

webプログラマが勉強したことのメモ。

PHPでjpg / png画像をWebP画像に変換し保存する方法

   

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に変換して保存という形になる思われるので、ソースコードはちょっと改変が必要そう。

 - PHP

  関連記事

PHPでeval時のエラー

eval()'d code on line みたいなエラーが出てた。 よそのシス ...

他サーバーにある画像をPHPで取得して保存する方法

他サーバーにある画像をURLで指定して、PHPで取得して保存する方法のメモ。 フ ...

FPDIで「This PDF document probably uses~~」エラーの対処方法

FPIDであるPDFを読み込ませようとすると「This PDF document ...

PHPでのend~~について

endforとかendifとか使いたかったけど、構文の書き方が 分からなかったの ...

CodeIgniterで共通の変数と定数を設定する

CodeIgniterで共通する配列が入った変数と、定数を設定したかった。以下に ...

PHPMailerを使ってメールをSMTP送信する方法(Composer無し)

PHPでメールをSMTP送信したかった。また、レンタルサーバだったのでCompo ...

PHPでパスワード付きのZIP / PDFファイルを作成する方法

PHPでZIPファイル化する方法やPDFファイル出力する方法を過去に書いたが、何 ...

PHPの条件式でまとめて評価

PHPのソースで、 if( !($hoge || $fuga || $foo) ...

ガラケーorスマフォ判別

ガラケーとスマフォの判別。 やりたい事はガラケーorスマフォで条件分岐させたい。 ...

MySQLのダンプとリストアをコマンドで行う

MySQLのダンプとリストアをコマンドで行う ■ダンプ mysqldump -u ...