Что касается вопроса о данных EXIF, которые необязательно обрабатываются корректно, поскольку данные EXIF во многих ситуациях не имеют значения, здесь приведен пример кода, демонстрирующий только функцию ротации JPEG без потерь LLJTran (благодаря пользователю user113215):
final File SrcJPEG = new File("my-input.jpg");
final File DestJPEG = new File("my-output.jpg");
final FileInputStream In = new FileInputStream(SrcJPEG);
try {
final LLJTran LLJT = new LLJTran(In);
LLJT.read(LLJTran.READ_ALL, true);
LLJT.transform(LLJTran.ROT_90);
final FileOutputStream Out = new FileOutputStream(DestJPEG);
try {
LLJT.save(Out, LLJTran.OPT_WRITE_ALL);
} finally {
Out.close();
}
} finally {
In.close();
}
Если вы вводите и выводите объекты File
, ссылающиеся на один и тот же файл, вы можете запускать это снова и снова и наблюдать, что изображение не ухудшается, независимо от того, сколько итераций оно проходит.