Я пытаюсь написать программное обеспечение для оптимизации изображений на Java. Первым и самым очевидным шагом было удаление метаданных EXIF, которые я успешно выполнил. Я также попытался сжать изображения с помощью ImageIO и параметра качества сжатия, как показано ниже:Возможно ли оптимизация изображения на Java?
filepath=chosen.getCanonicalPath()+"-temp.jpg";
file=new File(filepath);
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
if (!writers.hasNext()){
throw new IllegalStateException("No writers found");
}
OutputStream os = new FileOutputStream(file);
ImageWriter writer = (ImageWriter) writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.9f);
writer.write(null, new IIOImage(optimized, null, null), param);
Однако, это действительно не работает все, что хорошо. Он работает в порядке, когда исходное изображение отличается от другого (то есть не jpeg), но при сжатии с jpeg на jpeg иногда даже размер файла больше.
Сайты, как www.tinyjpg.com утверждают, что (и делают) уменьшить размер файла в формате JPEG изображений с помощью 40% -60% с без потери качества. Как они это делают (как процедурно, так и программно)? Какие типы данных они удаляют, и как можно удалить эти данные без потери качества? Возможно ли это на Java?
Любые указания и/или ресурсы, которые вы можете дать мне, очень ценятся!
Предположительно tinyjpg имеет свой собственный алгоритм сжатия. Я сомневаюсь, что вы найдете его в стандартной библиотеке. Можете взглянуть на подвыборку Chroma e.d. – mpkorstanje
Конечно, у них есть свой алгоритм. Мой вопрос в том, действительно ли у вас есть идея, что (процедурно) это могло бы сделать? Какие типы данных можно безопасно отбросить? Как вы узнаете, какие фрагменты данных могут быть отброшены для определенного jpeg? –
* «Сайты, такие как www.tinyjpg.com, претендуют на (и делают) уменьшение размера файла jpeg-изображений на 40% -60% с ** без потери качества **. * Я очень сомневаюсь. Возможно, вы не видите потери качества, и это здорово, но утверждать, что это не так, просто ... ну, давайте пойдем с * крайне маловероятным в общем случае *. –