Изменение размера изображения в формате JPEG во время декодирования

StackOverflow https://stackoverflow.com/questions/2500647

Вопрос

Я работаю над программой, которая создает миниатюры изображений в формате JPEG "на лету".Теперь я задумался:поскольку изображение в формате JPEG строится из блоков размером 8x8 пикселей (В Википедии есть отличное объяснение), можно ли было бы пропустить часть декодирования?

Допустим, мои миниатюры по крайней мере в 8 раз меньше исходного изображения.Затем мы могли бы сопоставить каждый блок размером 8x8 во входном файле с 1 пикселем в выходных данных декодирования, включив только постоянный член дискретного косинусоидального преобразования.Большая часть данных изображения может быть сразу удалена и не нуждается в обработке.Кроме того, использование памяти сокращается в 64 раза.

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

Если нет, то это потому, что такой подход не имеет смысла, или просто потому, что до него еще никто не додумался?

Это было полезно?

Решение

Я думаю, что шкала djpeg функция делает что-то вроде этого.

Он может масштабировать блок размером 8x8 до любого размера от 1 до 16 пикселей.

"Это интересно, потому что выходные данные разного пространственного размера могут быть извлечены непосредственно из данных JPEG (DCT) без отдельного полного декодирования и пространственной повторной выборки".

Другие советы

Согласно этот ответ, ЭПЭГ из Enlightenment сделали именно это, собрав коэффициенты DCT, чтобы уменьшить изображение в 8 раз.Вот этот текущий дом EPEG.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top