2012-02-10 2 views
0

Задача состоит в том, чтобы написать программу, которая будет обрабатывать файлы JPEG. Но проблема в том, что некоторые файлы jpeg имеют большие размеры - сотни мегабайт. Итак, вопрос: возможно ли обрезать файл jpeg, но без загрузки всего файла в ОЗУ, используя что-то вроде fseek() и декодирование только тех частей, которые вам нужны.Обрезка большого jpeg

Возможно ли это? Если да, возможно, некоторые библиотеки делают то же самое.

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

+3

Вы уверены, что большие файлы на самом деле являются проблемой? У компьютеров в эти дни есть гигабайты оперативной памяти, и когда на диске недостаточно физической памяти, вы нажимаете на диск ... Попробуйте сначала обрезать большую jpeg, чтобы посмотреть, будет ли она перфомансом. вопрос. И ... преждевременная оптимизация - это корень всего зла. –

+0

Это звучит подозрительно, как проект домашней работы. – Edwin

+0

нормально, но в совершенстве, эта утилита, должна работать в режиме реального времени, и есть некоторые файлы (карты), которые больше. Самый большой - 4 ГБ, работать с ним в режиме реального времени невозможно, если tou будет загружать его в барабан – briskly

ответ

5

Существует два способа выполнить это.

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

Второй способ - использовать библиотеку, которая позволяет вам читать и писать по одной строке за раз. Я знаю, что IJG library может это сделать и, возможно, и другие. Это простой способ, но недостатком является то, что изображение проходит через декомпрессионный/рекомпрессионный проход и будет терять качество и/или быть больше.

+0

Большое спасибо, я попробую первый путь – briskly

Смежные вопросы