[SCALA] ImageIO.write를 사용하여 품질 손실
SCALAImageIO.write를 사용하여 품질 손실
나는 자동으로 압축을 해제 할 수있는 방법, ImageIO.write을 사용하여 상당한 품질의 손실을 noticied있다?
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()
해결법
-
==============================
1.사용의 ImageWriter.
사용의 ImageWriter.
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next(); ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // Needed see javadoc param.setCompressionQuality(1.0F); // Highest quality writer.write(image);
비 사진 이미지는 .PNG를 사용합니다.
@PiotrekDe 댓글을 달았습니다, 다음은 더 논리적 인 것 같다.
writer.write(null, new IIOImage(image, null, null), param)
-
==============================
2.스칼라에서 https://github.com/sksamuel/scrimage를 사용하여 당신은 사진과에 압축 수준을 설정할 수 있습니다
스칼라에서 https://github.com/sksamuel/scrimage를 사용하여 당신은 사진과에 압축 수준을 설정할 수 있습니다
val in = // some input stream or byte array val out = // some output stream etc Image(in).writer(Format.JPEG).withCompression(1.0).write(out)
당신은 압축 수준 0과 1.0 사이의 값을 설정할 수 있습니다.
-
==============================
3.JPEG 이미지는 손실 압축을 사용한다. 사용 대신에 PNG로. 그것도 있지만, 무손실 알고리즘으로 압축합니다.
JPEG 이미지는 손실 압축을 사용한다. 사용 대신에 PNG로. 그것도 있지만, 무손실 알고리즘으로 압축합니다.
-
==============================
4.JPEG 압축은 손실이다. 그러나 PNG 압축 무손실입니다. 그래서, PNG 형식으로 쓰기에 좋습니다. 즉, 당신은 PNG 형식으로 압축 할 경우에도 손실 품질하지 않습니다. 간단한 라인 :
JPEG 압축은 손실이다. 그러나 PNG 압축 무손실입니다. 그래서, PNG 형식으로 쓰기에 좋습니다. 즉, 당신은 PNG 형식으로 압축 할 경우에도 손실 품질하지 않습니다. 간단한 라인 :
ImageIO.write(newBI,"png",someOutputStream);
당신이 품질 JPG 형식을 원한다면, 100 % 품질을 설정합니다. 다음 코드를 도움이 될 수 있습니다.
ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next(); ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam(); jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); jpgWriteParam.setCompressionQuality(1f); jpgWriter.setOutput(someOutputStream); //better to use ImageOutputStream jpgWriter.write(null,new IIOImage(yourImage, null, null), jpgWriteParam);
from https://stackoverflow.com/questions/17015197/quality-loss-using-imageio-write by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 무기 호는 목록의 마지막에 요구되는 이유는 단점 연산자를 사용하여 구축 (0) | 2019.11.24 |
---|---|
[SCALA] 어떻게 단순 무작위 표본 추출 및 아파치 스파크 (스칼라)에서 dataframe SAMPLE 기능 일을? (0) | 2019.11.24 |
[SCALA] SBT의 DependsOn RootProject는 : 종속성을 컴파일되지 않습니다 (0) | 2019.11.24 |
[SCALA] 스칼라는 일반적인 특성과 개체를 확장 (0) | 2019.11.24 |
[SCALA] 아파치 스파크에서 여러 파일이 포함 된 우편을 읽는 방법 (0) | 2019.11.24 |