import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.*; import javax.imageio.stream.FileImageOutputStream; /** Convert capture PNGs to JPEG (the figures' inputs do not need to be lossless). */ public class RawJpeg { public static void main(String[] a) throws Exception { for (String n : a) { BufferedImage src = ImageIO.read(new File(n)); // screencap PNGs carry an alpha channel; JPEG cannot take that colorspace BufferedImage im = new BufferedImage( src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_RGB); im.createGraphics().drawImage(src, 0, 0, null); String out = n.replace(".png", ".jpg"); ImageWriter w = ImageIO.getImageWritersByFormatName("jpeg").next(); ImageWriteParam p = w.getDefaultWriteParam(); p.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); p.setCompressionQuality(0.88f); try (FileImageOutputStream os = new FileImageOutputStream(new File(out))) { w.setOutput(os); w.write(null, new IIOImage(im, null, null), p); } w.dispose(); System.out.println(out + " " + new File(out).length() / 1024 + " KB"); } } }