リサイズ使用中の画像アップロードエラー

大きな PNG をアップロードして max image size kb に準拠させるためにサイズ変更を試みると、以下のエラーが発生します。

lib/discourse.rb:57:in `exec': convert: improper image header `/tmp/image20200221-243-17ldizm.jpg' @ error/png.c/ReadPNGImage/4294.

画像の拡張子を .jpeg に変更すると、正常にアップロードされます!

また、max image size kb をデフォルト値にリセットしても問題なく動作しますが、どうやら画像が jpeg として名前が変更されているようです。

画像はこちらです:Dropbox


編集:max image size kb オプションの下に以下の記載があることに気づきました。

アップロード可能な画像の最大サイズ(kB)。これは nginx(client_max_body_size)/ Apache またはプロキシ側でも設定する必要があります。

私はその設定を行っていないのですが、それが原因でしょうか?(どこを編集すればよいかの例はありますか?)

「いいね!」 1

サイトの app.yml ファイルに upload_size パラメータを追加することで、その値を増やすことができるはずです。詳細については、Change the maximum attachment/upload size をご覧ください。

「いいね!」 5

max image size kb を 500k に変更したらアップロードできましたが、ユーザーに表示されるエラーメッセージは単に「アップロード失敗:画像サイズが大きすぎます。サイズを調整して再試行してください」といった内容にするべきではないでしょうか?

「いいね!」 5

エラーメッセージはひどいものですが、そもそもその設定を変更する人はどれくらいいるのでしょうか?

「いいね!」 5

今はっきりとは覚えていませんが、私の記憶が正しければ、その設定を下げて、アップロードされた画像がその値より大きい場合、Discourse は画像のサイズを調整してその値以下にしようとするはずです。

これは「png から jpg への変換品質」設定に関連していると思います。だいぶ前になりますが、サムが画像サイズ調整機能の開発に関わっていたと記憶しています。

設定を変更したい、あるいは画像サイズを小さくしたいと考えている人については、画像の品質がそれほど重要ではないサイト(写真サイトを除くほとんどのサイト)であれば適用されると想像します。


簡単な検索でこちらが見つかりました。どうやらサイズ調整機能はまだ実装されていないようです(でも実装されたと思っていたのですが :thinking:

「いいね!」 1

私の認識も同じでした……サーバー側でアップロードされた大きな画像を処理するダウンサイジング機能があると思っていたのです。

編集/更新:

ここですでにかなり詳しく説明されています:

「いいね!」 5

@dan ユーザーが非常に大きな画像をアップロードしようとした際に、より良いエラーメッセージを表示する方法を探してもらえますか?優先度は低めです。

「いいね!」 4

ここで 2 つの問題を修正しました:

  1. 画像最適化パイプラインが PNG を JPEG に変換した後、PNG 画像用の操作を使用して生成された JPEG を最適化しようとしていました。

  2. ImageMagick のエラーがユーザーに返されましたが、全く役に立たないものでした(例: convert: improper image header...)。

「いいね!」 8