WordPressでPNG画像がJPGに勝手に変換!?|原因は EWWW Image Optimizer

ブログ奮闘記
きすけ
きすけ

WordPressにアップロードしたPNG画像がJPGになってるんだけど、どういうこと⁉

そんな事象に頭を抱えながら調査したところ、原因は「EWWW Image Optimizer」という画像圧縮プラグインにありました。

しかもこのプラグイン、自動変換の設定をオフにしても強制的に変換する場合があることが判明。

この記事では、PNG画像がJPGに自動変換される原因と、それを確実に防ぐための方法を解説します!

【事象】PNG画像をアップロードするとJPGに変換される

PNG形式の画像をWordPressにアップロードすると、自動でJPG形式に変わっていました。

png画像をWordpressにアップロードするとjpgに変換されている

アップロード時に特に通知メッセージなどは出なかったので、気づくまでに時間がかかりました…

原因と対処法

原因は「EWWW Image Optimizer」という画像圧縮プラグインでした。

影響する原因が2つありましたので、それぞれご説明します。

対処法①:EWWW Image Optimizer の設定「PNGをJPGに変換」をOFF

EWWW Image Optimizer には「PNGをJPGに変換」という設定があります。

この設定をON(チェックあり)にすると、PNG画像がアップロード時にJPG画像に変換されます。

EWWW Image Optimizerの設定画面で「変換」→「PNGをJPGに変換」をOFFにする

しかし以下の場合は、この設定をON(チェックあり)にしてもPNGからJPGへ変換されません

設定に関わらず自動変換されないケース
  • 透過部分があるPNG画像(JPGは透過に非対応)
  • JPGに変換してもファイルサイズが小さくならない画像

逆に、以下の条件を満たす場合は、設定をOFF(チェックなし)にしても勝手に変換されます

設定に関わらず自動変換される条件
  • PNGのファイルサイズが300KB以上
  • PNGが透過でない(画像に透明部分がない)
  • JPGに変換するとファイルサイズが小さくなる
きすけ
きすけ

設定に関係なく変換されるとは思いませんでした

自動で変換されるという説明はプラグインのサポートページ(英語)の書き込みにあります。(設定画面やヘルプに書いてほしいのですが…)

EWWW IO will convert any image from PNG to JPG during upload if the following conditions are met, regardless of the settings on the Convert tab:

  1. The PNG image is over 300kb — that’s a good clue the image isn’t suited to be in the PNG format.
  2. The PNG image does not have transparency, since JPG doesn’t support it.
  3. Converting to JPG produces a smaller image.

If you really think your images should remain in the PNG format, you can add this line to your wp-config.php file:

define( ‘EWWW_IMAGE_OPTIMIZER_DISABLE_AUTOCONVERT’, true );

https://wordpress.org/support/topic/ewww-converting-png-to-jpg-this-setting-is-unchecked/

Google翻訳すると以下の通りです。

EWWW IO は、以下の条件を満たす場合、「変換」タブの設定に関わらず、アップロード時にすべての画像を PNG から JPG に変換します。

  1. PNG 画像が 300KB を超えている場合 — これは、画像が PNG 形式に適していないことを示しています。
  2. JPG では透過がサポートされていないため、PNG 画像は透過されません。
  3. JPG に変換すると、画像サイズが小さくなります。

どうしても画像を PNG 形式のままにしたい場合は、wp-config.php ファイルに次の行を追加してください。
define( ‘EWWW_IMAGE_OPTIMIZER_DISABLE_AUTOCONVERT’, true );

強調部分のとおり、根本的な対処には「wp-config.php」へのコード追加が必要です。

対処法②:wp-config.phpに自動変換を無効にするコードを追加

サポートページの案内のとおり、wp-config.phpに次のコードを追加すると、pngからjpgへの自動変換を無効にできます。

// EWWW Image Optimizer のPNG→JPG自動変換を無効にする
define( 'EWWW_IMAGE_OPTIMIZER_DISABLE_AUTOCONVERT', true );

wp-config.phpが壊れるとWordPressが動作しなくなる可能性がありますので、バックアップを取ったうえで注意して作業しましょう。

コードの追加先は「wp-config.php」

コードの追加先が「functions.php」と書かれているサイトもありますが、正しい追加先は「wp-config.php」です。

  • wp-config.php:環境設定やプラグインの動作制御に関わるグローバル設定向け
  • functions.php:テーマ固有の機能拡張や表示系のカスタマイズ向け

先ほどのサポートページでも「wp-config.php」に追加するように書いてあります。

If you really think your images should remain in the PNG format, you can add this line to your wp-config.php file:

define( ‘EWWW_IMAGE_OPTIMIZER_DISABLE_AUTOCONVERT’, true );

最初は「functions.php」に記載して動作していたのですが、この記事を書いている途中で「wp-config.php」が正しいと知りました(笑)

今は「wp-config.php」に変更して、問題なく動作しています!

まとめ

以上、PNG画像がJPGに勝手に変換される原因と対処方法でした。

  • PNG画像がJPGに勝手に変換される原因は「EWWW Image Optimizer」
  • 「PNGをJPGに変換」をオンにしても、必ず変換されるとは限らない
  • 「PNGをJPGに変換」をオフにしても、条件を満たせば勝手に変換される
  • 勝手に変換されないようにするには「wp-config.php」にコードを追加

プラグインとしては、「透過じゃないPNGはJPGに変換したほうがファイルサイズが減ってハッピーでしょ?」ということなんでしょうね。

きすけ
きすけ

せめて設定画面でコントロールできたり、通知などしてくれれば分かりやすいんですけどね。

最初は何が起きているのか分からず困惑しましたが、この記事が参考になれば嬉しいです!