Помогите мне понять сжатие изображений

Не совсем понимаю, как работает сжатие изображений в Discourse. Объясните, пожалуйста.

  • Я загрузил изображение размером 2392×884 и весом 214 КБ, и его разрешение осталось без изменений.
  • Я загрузил изображение размером 3200×1800 и весом 1,7 МБ, и его разрешение уменьшилось до значения настройки composer media optimization image resize dimensions threshold.

При настройке ширины в 1280 пикселей я ожидал, что все изображения будут уменьшены до этой ширины. Однако, похоже, что приоритет устанавливает параметр composer media optimization image bytes optimization threshold.

  • Мое первое изображение весило менее 524 КБ, поэтому оно не было изменено.
  • Второе изображение весило более 524 КБ, поэтому оно было изменено.

Если я правильно понял, можно ли настроить уменьшение всех загружаемых файлов до ширины 1280 пикселей?

Вот мои текущие настройки для подтверждения:

max image size kb = 4096

Может, установить этот порог очень низким?

Так как тема названа очень обобщённо, я не стал создавать новую :kissing_face_with_smiling_eyes:, но что на практике означает «оптимизация на стороне клиента» — операционная система устройства сама решает, делать ли что-то или нет? Но это приведёт к ситуации, когда гигабайтное изображение должно быть передано клиенту, прежде чем его размер уменьшится до приемлемого масштаба, или я совсем запутался?

После тестирования подтвердилось, что это верно :slight_smile:
Я считаю, что решение от @pfaffman — это правильный путь к достижению желаемого результата.

Подробное объяснение: Faster (and smaller) uploads in Discourse with Rust, WebAssembly and MozJPEG
Краткое объяснение: большие изображения изменяют размер и перекомпрессируются на вашем устройстве (через JavaScript) перед отправкой в Discourse.

Да, это работает в том направлении. Ну, это гораздо более умный подход, чем оптимизация в другом направлении :man_facepalming:

Спасибо.

Я пробовал это вчера вечером перед публикацией, и это действительно, похоже, ключевой момент.

Вот в чём дело:

composer media optimization image bytes optimization threshold

  • Настройка 524288 (по умолчанию) = изображение хорошего качества, 1920 пикселей.
  • Настройка 200000 = изображение низкого качества, так как разрешение падает с 1920 до 1280 пикселей.

Поэтому сегодня утром на своём рабочем столе я взял то же изображение (2392 пикселя), изменил его размер до 1280 пикселей, и оно тоже немного ухудшилось. Так что я не могу обойти это ухудшение. Это результат снижения разрешения с 2392 до 1280 пикселей. Хотя размер изображения уменьшился в четыре раза.

Примечание: Фотографии в формате .HEIC не подчиняются тем же правилам. Фото .HEIC размером 4032 пикселя было уменьшено до 2016 пикселей. Поэтому я не знаю, как именно применялась эта настройка.

В целом, я думаю, что теперь всё понял, после небольшого метода проб и ошибок. Я думаю, что буду использовать настройки по умолчанию, мне действительно нравится дополнительная чёткость фото в 1920 пикселей по сравнению с 1280 пикселями.

Надеюсь, это поможет кому-то ещё.

Редактирование: Я изменил composer media optimization image bytes optimization threshold с значения по умолчанию 524288 на 200000. Я заметил, что загрузка обычного файла .png размером 1220 пикселей и весом 414 КБ привела к размеру файла всего 406 КБ. При снижении указанной настройки до 200000 размер файла уменьшился с 414 КБ до 201 КБ. Разрешение осталось неизменным.

Так что я не знаю, что ещё запускается этой настройкой, но очевидно, что происходит что-то ещё для дальнейшего уменьшения размера изображения.

Мне помогает диаграмма из поста в блоге:

X → composer media optimization image bytes optimization threshold
Y → composer media optimization image resize dimensions threshold
Z → composer media optimization image resize width target

Боюсь, я, должно быть, глуп, раз не до конца понимаю эту часть, глядя на определения настроек:

composer_media_optimization_image_dimensions_resize_threshold: по умолчанию 1920
Минимальная ширина изображения для запуска изменения размера на стороне клиента.

composer_media_optimization_image_dimensions_resize_target: по умолчанию 1920
Изображения шире composer_media_optimization_image_dimensions_resize_threshold будут изменены до этой ширины.
Должно быть ≥ этого порога.

Именно эта часть:

Должно быть ≥ этого порога.

Разве не должно быть ≤? Не понимаю, зачем изменять размер до большего значения ширины, чем порог :thinking:

Также в описании той же настройки первое название указано неверно:

composer_media_optimization_image_dimensions_resize_threshold

Правильное название — “Composer media optimization image resize dimensions threshold” (“resize dimensions”, а не “dimensions resize”).