12

Я хочу преобразовать изображение JPEG размером 640x480 в 320x240. Я знаю, что это может быть сделано путем декодирования изображения JPEG в необработанный YCbCr, масштабирования и перекодирования в JPEG. Но возможно ли с помощью кодирования JPEG напрямую масштабировать изображение без декодирования?

2 ответа2

14

Вы можете, но только если ваш просмотрщик JPEG поддерживает расширение SmartScale JPEG. jpegtran может сделать это для размеров N/8, с N = 1..16. В основном, размер блока DCT изменяется от 8x8 до чего-то другого во время повторного сжатия (например, 4x4), что эффективно масштабирует изображение.

Примечание. SmartScale была представлена в 8-й версии библиотеки libjpeg, но она не получила широкого распространения у зрителей.

Документ, подробно описывающий изменения, можно найти здесь: Evolution of JPEG.

РЕДАКТИРОВАТЬ: Кажется, что большинство зрителей не могут отображать эти изображения, так как они основаны на libjpeg-turbo. И libjpeg-turbo решила не реализовывать эту функцию. На самом деле, я пробовал довольно много программ (на Ubuntu 14.04 и Windows 8), и ни одна из них не смогла отобразить уменьшенное изображение, созданное с помощью jpegtrans. Даже Photoshop, IrfanView и GIMP не удалось.

РЕДАКТИРОВАТЬ 2: Фактически, Ubuntu и Fedora даже не поставляют библиотеку libjpeg8, но полностью заменяют ее версией libjpeg-turbo. Таким образом, ни одна из программ не сможет читать файлы JPEG SmartScale, за исключением нескольких двоичных файлов, которые статически связаны с исходной библиотекой libjpeg8.

3

Краткий ответ: нет. Изображение JPEG использует сжатие, что означает, что каждый выходной байт зависит от всех остальных. Если вы измените количество байтов изображения, то вы должны распаковать и повторно сжать.

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

Если вы много работаете с изображениями, лучше всего работать в формате сжатия без потерь, таком как PNG, с преобразованием в JPEG только после финализации изображений, при условии, конечно, что у вас есть дополнительное дисковое пространство.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .