Ошибка загрузки изображения при использовании ресайзера

Если вы попытаетесь загрузить большой 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:

Максимальный размер загружаемого изображения в КБ. Это также должно быть настроено в nginx (client_max_body_size) / apache или прокси.

Я не думаю, что делал это — может ли это быть причиной проблемы? (есть ли примеры, где это редактировать?)

1 лайк

Должно быть возможно увеличить это значение, добавив параметр upload_size в файл app.yml вашего сайта. Подробнее см. по ссылке: Change the maximum attachment/upload size.

5 лайков

Я изменил max image size kb на 500k, и загрузка прошла успешно. Но интересно, не стоит ли сообщение об ошибке, которое видят пользователи, сделать проще, например: «Загрузка не удалась: размер изображения слишком велик, пожалуйста, измените его размер и попробуйте снова»?

5 лайков

Сообщение об ошибке действительно ужасное, хотя интересно, сколько людей вообще меняют эту настройку?

5 лайков

Я точно не помню, но, насколько я помню (IIRC), если вы уменьшите этот параметр и загруженное изображение будет больше указанного значения, Discourse попытается изменить его размер, чтобы уменьшить его.

Думаю, это связано с настройкой png to jpg quality? Прошло уже довольно много времени, но мне кажется, что Сэм работал над ресайзером изображений.

Что касается тех, кто хочет изменить это (или, вернее, получить изображения меньшего размера), то я полагаю, что это применимо к любым сайтам, где качество изображений менее важно (то есть к большинству сайтов, за исключением фотосайтов).


Быстрый поиск показал это — похоже, что ресайзер ещё не реализован (хотя я был уверен, что он уже есть :thinking:)

1 лайк

Я тоже так думал… что существует функция уменьшения размера, которая обрабатывает большие загрузки на сервере.

ИСПРАВЛЕНИЕ/ОБНОВЛЕНИЕ:

Теперь это довольно подробно описано здесь:

5 лайков

@dan, сможешь найти способ сделать сообщение об ошибке более понятным, когда пользователь пытается загрузить очень большое изображение? Низкий приоритет.

4 лайка

Я исправил две проблемы здесь:

  1. Конвейер оптимизации изображений конвертировал PNG в JPEG, а затем пытался оптимизировать полученные JPEG с помощью операций для изображений PNG.

  2. Ошибки ImageMagick возвращались пользователю, но они были совершенно бесполезны (например, convert: improper image header...)

8 лайков