Наконец-то найдите способ сделать это.
Используйте javax.imageio.IIOImage. Его можно прочитать с помощью JpegImageReader.
Но в нем была ошибка, ошибка длилась 6 лет. (
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4924909
К счастью, если вы сделаете какой-нибудь хак (подделка раздела JFIF), и это сработает. : D
Итак, эту проблему можно решить следующим образом:
- Используйте ImageIO, чтобы получить ImageReader для JPEG
- Считать изображение JPEG в буфер памяти.
- Если при ошибке 4924909 произойдет ошибка, исправьте буфер изображения с ложной информацией JFIF
- Используйте ImageWriter для записи файла, позвольте ImageWriterParam сделать свое дело.
Что ж, похоже, все в порядке (каждая информация сохранена), за исключением одного, выходное изображение ярче (или, точнее, бледно), чем исходное изображение (этого не произойдет, если я использую предварительный просмотр OS X к сжатой фотографии, поэтому проблема должна быть в моем коде или Java, или мое неправильное использование :().
Итак, моя проблема сжатия jpeg в java еще не решена.
Есть предложения?