【PHP】GD関数『imagewebp』でのWebP変換方法&使えないポイント

      2042文字

今回は、以前書いた記事の続きで、『PHPのGD関数 imagewebp』を使用し、webp画像を変換・生成してみます。実際の挙動のほか、『アプリケーションによっては使えないんじゃね?』といったポイントも見つかったのでご紹介。さっそく見ていきましょう。

PHPのGD関数 imagewebpでwebp画像を変換・生成する方法と効果


ここでは下調べや実際の記述、効果を確認します。テストで使う画像は、このサイト(よんどけコラム)にアップされている画像にします。すでにアップされて場所がわかるほうが、このファンクションは使いやすいからです。

下調べ~サーバーのPHPがwebpをサポートしているか→gd_infoで

まず、『サーバー側でwebpをサポートしているか』を確認しましょう。方法はphp infoのほか、var_dump(gd_info())などでもok。gd_infoだと配列( [“JPEG Support”]=> bool(true) [“PNG Support”]=> bool(true)みたいなやつ)がでてきます。

ここで[“webp Support”]=> bool(true)となっていれば、webp系のGD関数を使うことができます。

GD関数 imagewebpでjpegを変換してみる


サーバーのFTP上でサクッと簡単に書きます。基本的にはアップされている画像のurlを指定するんですが、間に『ImageCreateFromjpeg』を挟みました。
なぜかというと、 GdImage オブジェクトが要求されているからです。fileやfreadでファイルを開いたり、直接imagewebpにurlを渡しても、動きません。


基本的には上記でokです。とはいえ、imagewebpでは『名前やパス』も指定できます。ためしに『new.webp』と入れたら、サーバー上・変換プログラムと同じ階層に生成されました。保存用フォルダ作っておけば、../とかフォルダ名指定するような書き方もokそうですね。

webp変換の効果~ファイルサイズが約3分の1に

で、効果を検証。ぶっちゃけwebpの効果なんてファイルサイズ削減と読み込みスピード向上だけです(笑)

元の状態では、97kbあったjpeg画像ですが・・・


webp化したのをダウンロードして確認。約3分の1になりました。windowsフォトビューワーなので、やや暗い色で表示されていますが、ブラウザだと綺麗に表示されます。

GD関数 imagewebpで使えなかったポイント→サーバー保存しないwebアプリケーションは厳しい

しかし、GD関数 imagewebpで、厳しいポイントがありました。管理人は『コンバーターいけるんじゃね?』と思って作り始めましたが、外部に公開できるサービスにするためには、サーバーに画像が直接保存されるのは避けたい(利用者プライバシーのため)というのがあります。

アップした一時ファイル($_FILES[‘〇〇’][‘tmp_name’]で情報は取れる)はすぐ消えるので、『画像をbase64_encodeして、ブラウザ表示しておく』という対策を考えたんですけど・・・

base64の文字列って、imagewebpやImageCreateFromjpegのパラメーターとしては使えませんでした(expects parameter 1 to be resourceのエラーが返るし、その後の変数も空なので未定義エラーになる。Call to undefined functionみたいなやつ)。

対策としては『canvas.toDataURL(“image/webp”);』みたいなフロント処理を考えています。

あとがき・まとめ

  • GD関数 imagewebpには、GdImage オブジェクトを渡す
  • ファイルサイズは、100kbくらいの画像で3分の1に
  • 保存場所とかが使われるサイト・アプリケーション向けかも

まとめると、このようなところでしょうか。アプリケーションによっては使えない印象だったので、サーバーサイド/フロント両方に目を向けてみようという感じでした。

WordPressサイト制作&リニューアル・機能開発サービス | アトリエSS


【カテゴリ】 - PHP・データベースetc
【タグ】 - ,

  関連記事

【PHPプログラミング】メモ帳に適当にメモったPV数値をexplodeで配列にし、array_sumで合計値を計算する
テスト環境(ローカル含む)でPHPサイト開発に使えるツール&xamppでやってみた例(設定や表示ファイルetc)
【WordPressフィールド画像取得】array_push&foreachループ、代替テキストをクラス出力、表示/非表示を切り替える方法
【PHP etc.プログラム学習サイトコードコピペ】全角引用符・バッククオートが入ってて動かない件に注意
WordPressの記事IDで判定して転送~PHP・headerとget_the_IDで対応、the_IDとの挙動の違いも
【別に止めなくてOK】WordPressサイトなどに、アメブロ・fc2など無料ブログの更新情報を表示して連携する方法
【PHP】GD関数『imagewebp』でのWebP変換方法&使えないポイント
【WordPressカスタムフィールド検索】meta_queryで、シリアライズ値が入ったフィールドを持つ記事をヒットさせるには?
WordPressユーザーが覚えると便利な条件分岐~投稿記事・固定ページ指定して表示/非表示
侍エンジニア塾ブログにあったPHPコードをシンプルに書いてみる(foreachで配列キーや値取得・continueで空要素スキップ)
【WPカスタマイズ】プラグイン不使用、テーマに関連記事表示機能を実装しPV・滞在時間を上げる
【WordPress条件分岐】is_singleとis_singularって違うの?→idやスラッグ指定、投稿タイプ指定の面で違いが