WordPressでPNG画像がJPGに勝手に変換される【原因は EWWW Image Optimizer】

きすけ
きすけ

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

ブログに慣れないうちは画像の入れ替えをよくするのですが、その際に画像の形式が不一致でエラーになってしまいました。

自分で変換を指定していたり、通知があるならまだしも、勝手に変換されるのは困ります

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

対処方法も判明し無事に解決しましたので、この記事でまとめていきます。

【事象】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にしても、必ず変換されるわけではありません

細かい条件は不明ですが、ファイルサイズが小さいなど、JPGに変換しても効果がない場合はこの設定をONにしても変換されないようです…

逆に、以下の条件を満たす場合は、設定を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に次のコードを追加すると、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に勝手に変換される原因はEWWW Image Optimizer

以上、PNG画像がJPGに勝手に変換される原因はEWWW Image Optimizerでした。

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

きすけ
きすけ

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

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