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