Я работаю над программой, которая создает миниатюры изображений JPEG на лету. Теперь я думал: так как изображение JPEG создается из 8x8-пиксельных блоков (Википедия имеет большое объяснение), было бы возможно пропустить часть декодирования?
Скажем, то, что мои миниатюры по крайней мере в 8 раз меньше, чем исходное изображение. Мы могли затем отобразить каждого 8x8 блок во входном файле к 1 пикселю в выводе декодирования включением только постоянного срока дискретного косинусного преобразования. Большинство данных изображения может быть отброшено сразу же и не должно быть обработано. Кроме того, использование памяти уменьшается фактором 64.
Я не хочу реализовывать это с нуля; это легко займет неделю. Есть ли какой-либо код там, который может сделать это?
В противном случае это вызвано тем, что этот подход не стоит, или просто потому что никто еще не думал о нем?
Я думаю, что функция djpeg's scale делает что-то вроде этого.
Она может масштабировать блок 8x8 до любого размера между 1 и 16 пикселями.
"Это интересно, потому что различные пространственные размеры могут быть получены непосредственно из данных JPEG (DCT) без отдельного полного декодирования и пространственной передискретизации."
.Проект, над которым я работаю в настоящее время, использует ImageGen, который делает все виды изменения размера изображения на лету - это может окупиться, если список функций соответствует тому, что вы хотите. В противном случае, я предполагаю, что вы хотите реализовать сжатие файлов с потерями на изображениях, что должно было сделано раньше!
Согласно этот ответ , EPEG из Просвещения сделал именно это, собрав коэффициенты DCT для уменьшите изображение в 8 раз. Вот текущая домашняя страница EPEG .