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


2 ответа
вы можете, но только если ваш просмотрщик JPEG поддерживает SmartScale расширение JPEG. jpegtran может сделать это для размеров N / 8, С N=1..16. В принципе, размер блока DCT изменяется с 8x8 на что-то другое во время рекомпрессии (например, 4x4), что эффективно масштабирует изображение.
Примечание: SmartScale был представлен в версия 8 библиотеки libjpeg, но она не широко поддерживается зрителями.
документ, описывающий изменения подробно можно посмотреть здесь:эволюция JPEG.
изменить: похоже, что большинство зрителей не могут отобразить эти изображения, так как они основаны на libjpeg-turbo. А libjpeg-turbo решил не реализовывать эту функцию. На самом деле, я пробовал довольно много программ (на Ubuntu 14.04 и Windows 8), и никто не смог отобразить уменьшенное изображение, созданное с помощью jpegtrans. Даже Photoshop, IrfanView и GIMP неудачный.
EDIT 2: на самом деле Ubuntu и Fedora даже не поставляют библиотеку libjpeg8, а полностью заменяют ее версией libjpeg-turbo. Таким образом, ни одна из программ не сможет читать файлы JPEG SmartScale, за исключением нескольких двоичных файлов, которые статически связаны с оригинальной библиотекой libjpeg8.

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

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]