Изменение размера изображения JPEG во время декодирования - PullRequest
7 голосов
/ 23 марта 2010

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 23 марта 2010

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

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

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

2 голосов
/ 23 марта 2010

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

0 голосов
/ 23 марта 2010

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

...