2016-09-28 6 views
1

У меня есть небольшая информация о файлах изображений.Преобразование PNG в JPEG, с использованием качества сжатия, почему инвертированные цвета?

Чтобы иметь возможность конвертировать PNG в JPEG в Java, сначала я использовал ниже части кода для преобразования PNG в JPEG: перевернутый

код Часть 1)

BufferedImage newBufferedImage = new BufferedImage(bufferedImageFile.getWidth(), bufferedImageFile.getHeight(), 
     BufferedImage.TYPE_INT_RGB); 
newBufferedImage.createGraphics().drawImage(bufferedImageFile, 0, 0, Color.WHITE, null); 
File retTempFile = MakeupFileUtil.createTempFile(fileName); 
ImageIO.write(newBufferedImage, "jpg", retTempFile); 
return retTempFile; 

Это позволяет выполнить но качество вывода ниже исходного качества изображения PNG (скажем, качество PNG составляет 100, а JPEG - 75).

Затем from this answer, я попытался использовать часть кода, которая использует "Compression Качество":

код Часть 2)

JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(null); 
jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
jpegParams.setCompressionQuality(1f); 
final ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); 
writer.setOutput(new FileImageOutputStream(jpegFile)); 
writer.write(null, new IIOImage(bufferedImageFile, null, null), jpegParams); 

Но на этот раз, преобразованный файл JPEG был перевернутый цвета.

Источник изображения (PNG): source png image

Изображение После того, как код Часть 2 (JPEG): part 2 code result jpeg

Почему это происходит?

ответ

1

Просьба и написать newBufferedImage, а не bufferedImageFile на «Код 2».

Так измените эту строку, чтобы быть:

writer.write(null, new IIOImage(newBufferedImage, null, null), jpegParams); 

Если вы пытаетесь написать PNG изображение в формате JPEG ваш будет в конечном итоге с фантастическими результатами.