// quality = 0 to 100 static byte[] toJPEGWithQuality(double quality, BufferedImage img) ctex { // need to drop alpha channel for this to work img = dropAlphaChannelFromBufferedImage(img); new ByteArrayOutputStream stream; var jpgWriter = first(ImageIO.getImageWritersByFormatName("jpg")); try { var params = jpgWriter.getDefaultWriteParam(); params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); params.setCompressionQuality(toFloat(quality/100)); jpgWriter.setOutput(new javax.imageio.stream.MemoryCacheImageOutputStream(stream)); jpgWriter.write(null, new IIOImage(img, null, null), params); } finally { jpgWriter.dispose(); } ret stream.toByteArray(); }