Converting PNG into JPEG

image, jai, java, jpeg, png

Solution

you probably have alpha channel in the png that you need to get rid of before trying to write the jpg.

Create a new BufferedImage with type TYPE_INT_RGB (not TYPE_INT_ARGB), and then write your source image (pngImage) onto the new blank image.

Something like this (warning, not tested code):

BufferedImage newImage = new BufferedImage( pngImage.getWidth(), pngImage.getHeight(), BufferedImage.TYPE_INT_RGB);
newImage.createGraphics().drawImage( pngImage, 0, 0, Color.BLACK, null);

Problem

I'm having problems converting a simple PNG into a JPEG format. I'm using the following code: ... ``` File png = new File(filePath); try { SeekableStream s = new FileSeekableStream(png); PNGDecodeParam pngParams = new PNGDecodeParam(); ImageDecoder dec = ImageCodec.createImageDecoder("png", s, pngParams); RenderedImage pngImage = dec.decodeAsRenderedImage(); JPEGEncodeParam jparam = new JPEGEncodeParam(); jparam.setQuality(0.50f); // e.g. 0.25f File jpeg = new File("jpeg.jpeg"); FileOutputStream out = new FileOutputStream(jpeg); ImageEncoder encoder = ImageCodec.createImageEncoder("JPEG", out, jparam); encoder.encode(pngImage); s.close(); } catch (IOException e) { ok = false; e.printStackTrace(); } return ok; } ``` ... I end up with an JAI exception -> java.lang.RuntimeException: Only 1, or 3-band byte data may be written. at com.sun.media.jai.codecimpl.JPEGImageEncoder.encode(JPEGImageEncoder.java:148) ... Ran out of options. Any suggestion?

Original source

Related problems