2013-09-01 2 views
1

У меня есть файлы изображений JPG, которые я хочу загрузить в BufferedImage, а позже напишу BufferedImage обратно в файл JPG. Вот что я сейчас делаю.Самый быстрый способ чтения/записи изображений JPG без потери качества?

Есть ли лучший способ не потерять качество и ускорить чтение/запись?

Read:

BufferedImage image = ImageIO.read(new File(storagePath + fileName + extension)); 

Запись:

BufferedImage image = // some jpg image   

Iterator iter = ImageIO.getImageWritersByFormatName("JPG"); 
if (iter.hasNext()) { 
    ImageWriter writer = (ImageWriter) iter.next(); 
    ImageWriteParam iwp = writer.getDefaultWriteParam(); 
    iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
    iwp.setCompressionQuality(quality); 

    File outFile = new File(storagePath + fileName + extension); 
    FileImageOutputStream output = new FileImageOutputStream(outFile); 
    writer.setOutput(output); 
    IIOImage iioImage = new IIOImage(image, null, null); 
    writer.write(null, iioImage, iwp); 
} 
+0

Я не делал никаких тестов, но, возможно, PNG работает быстрее. PNG всегда без потерь. –

+0

Я знаю, но это занимает больше памяти. И это был не мой вопрос. –

+0

Взгляните на это: http://stackoverflow.com/questions/7982409/is-jpeg-lossless-when-quality-is-set-to-100 –

ответ

1

Вы можете свести к минимуму потери качества в пересжатии JPEG, используя ту же таблицу квантования, используемую для коррекции исходного изображения. По-прежнему можно получить однократные ошибки от округления, но вы можете получить его довольно близко.

Проблема в том, как получить таблицы квантования. Если ваша кодировка позволит вам указать их, вы можете вывести значения из исходного изображения. В противном случае вы должны надеяться, что изображения были первоначально закодированы с использованием одного и того же кодировщика.

«Значения качества» не являются частью JPEG. Они представляют собой метод выбора таблиц квантования, используемых некоторым кодировщиком. LIBJPEG - самый распространенный кодировщик, но есть и другие, которые делают вещи по-другому.

PNG-кодирование обычно медленнее, чем JPEG.

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