Qualität Verlust mit ImageIO.schreiben
Habe ich noticied erheblichen Qualitätsverlust mit ImageIO.schreiben, wie kann ich die automatische Komprimierung deaktivieren ?
val baos: ByteArrayOutputStream = new ByteArrayOutputStream
val newBi = new BufferedImage(img.getWidth, img.getHeight, BufferedImage.TYPE_INT_RGB)
val gr = newBi.createGraphics()
gr.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), Color.WHITE, null)
ImageIO.write(newBi, "jpeg", baos)
val b = baos.toByteArray
baos.close()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden ImageWriter.
Für nicht-Foto-Bilder verwenden .png.
Als @PiotrekDe kommentiert, die folgenden scheint logischer.
param
zurückwriter
wie:writer.write(null, new IIOImage(image, null, null), param)
In Scala, mit https://github.com/sksamuel/scrimage Sie können den Komprimierungsgrad auf jpegs
Sie können einen beliebigen Wert zwischen 0 und 1.0 für den Komprimierungsgrad.
jpeg-Bilder mit einer verlustbehafteten Kompression.
Verwenden Sie png statt. Das ist, komprimiert aber auch mit einem verlustfreien Algorithmus.
JPEG Cmpression ist verlustbehaftet. Aber PNG-Komprimierung ist verlustfrei. So, ich schlage vor zu schreiben, im png-format. Das bedeutet, dass Sie nicht den Verlust der Qualität, auch wenn Sie komprimiert im PNG-format. Einfache Linien:
Aber, wenn Sie wollen, dass es im jpg-format mit Qualität, setzen Sie die Qualität auf 100%. Der folgende code kann dir helfen.