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