Discourse обрезает верхние и нижние пиксели при генерации миниатюр

Когда вы прикрепляете изображения к сообщению, Discourse изменяет их размер, чтобы создать миниатюры, подходящие для отображения.

Похоже, есть ошибка в этом процессе, из-за которой постоянно теряются верхние и нижние строки пикселей.

Это не критично, но делает изображения с тонкими рамками странными. (Например, большинство скриншотов программ Windows 10 выглядят неправильно, потому что нижний край окна отсутствует.)

Наблюдения:

  • Похоже, это не связано с соотношением сторон, поэтому я не думаю, что это преднамеренное обрезание очень широких или высоких изображений; похоже, это ошибка.

  • Я проверил, что пиксели отсутствуют в самом файле миниатюры. Значит, проблема возникает при генерации миниатюры на сервере, а не при отображении браузером.

  • Редакция: Я только что заметил, что верхние и нижние пиксели не исчезают полностью, но они настолько размыты/выцветшие, что можно считать их пропавшими. Возможно, это связано с тем, как алгоритм изменения размера обрабатывает края изображения? С левыми и правыми краями такого никогда не происходит, например, на портретных скриншотах.

  • При клике на изображение в полном размере оно отображается корректно, по крайней мере.

Надеюсь, это примерное изображение воспроизведет проблему здесь, на форуме Discourse:

Это должно быть белое изображение с красной рамкой в 1 пиксель со всех сторон. Если проблема проявится здесь, вы увидите только левую и правую рамки, пока не кликнете для просмотра изображения в полном размере.

(Редакция: Действительно, здесь это происходит.)

Если проблема не проявится, вот результат, который я вижу на своём форуме:

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

4 лайка

Да, я тоже это заметил уже довольно давно. Не уверен, что с этим можно сделать.

1 лайк

Интересно, я вижу верх, левую и правую стороны, но не нижнюю.

chrome://gpu
Версия Chrome Chrome/87.0.4280.141
Операционная система Windows NT 10.0.19042
GL_RENDERER ANGLE (Intel(R) HD Graphics 620 Direct3D11 vs_5_0 ps_5_0)
1 лайк

Интересно, зависит ли это от размера экрана, когда разным клиентам предоставляются разные ресурсы.

Кратко просмотрев пост/изображение выше через F12, я обнаружил два ресурса, плюс оригинальное изображение:

  • Оригинальное изображение (1416 x 946) /original/3X/e/2/e2c5f032e18fa374c0593af71cf25d3499826289.png, которое не тронуто. Прямая ссылка

  • Уменьшенная версия (1380 x 920) optimized/3X/e/2/e2c5f032e18fa374c0593af71cf25d3499826289_2_1380x920.png, у которой верхний и нижний края почти невидимы. Прямая ссылка

  • Ещё более уменьшенная версия (640x460) optimized/3X/e/2/e2c5f032e18fa374c0593af71cf25d3499826289_2_690x460.png, у которой нет нижнего края, но есть левый, верхний и правый края. Прямая ссылка

Возможно, существуют аргументы для ImageMagick, позволяющие настроить алгоритм масштабирования и обработку пикселей на краях, хотя любые изменения, разумеется, могут ухудшить ситуацию в других случаях, даже улучшив текущую.

1 лайк

Да, я думаю так же. Это проблема алгоритма масштабирования. Пока оригинальная версия сохраняется, я не вижу здесь серьёзной проблемы, поэтому перемещаю это в запрос на новую функцию.

4 лайка