Hello, The com.sun.imageio.plugins.png.PNGImageReader was updated during one of the jdk1.6 releases (I think the change happened in jdk1.6_14).
One of the changes that I noticed caused some performance impact when generating PS with a PNG image in FOP is this one in the getImageTypes() method: case PNG_COLOR_RGB: if (bitDepth == 8) { // some standard types of buffered images // which can be used as destination l.add(ImageTypeSpecifier.createFromBufferedImageType( BufferedImage.TYPE_3BYTE_BGR)); l.add(ImageTypeSpecifier.createFromBufferedImageType( BufferedImage.TYPE_INT_RGB)); l.add(ImageTypeSpecifier.createFromBufferedImageType( BufferedImage.TYPE_INT_BGR)); } // Component R, G, B rgb = ColorSpace.getInstance(ColorSpace.CS_sRGB); The if (bitDepth ==8) {} code is new. There is similar new code for PNG_COLOR_RGB_ALPHA. This new code is executed for some PNG images and the result is seen in the org.apache.xmlgraphics.ps.ImageEncodingHelper.determineEncodedColorModel() method: int[] offsets = piSampleModel.getBandOffsets(); for (int i = 0; i < offsets.length; i++) { if (offsets[i] != i ) { //Don't encode directly as samples are not next to each other //i.e. offsets are not 012 (RGB) or 0123 (CMYK) return; } } The offsets come as [2, 1, 0] instead of [0, 1, 2] so the above code returns. As result, the encode() method in the same class: public void encode(OutputStream out) throws IOException { if (!isConverted()) { if (optimizedWriteTo(out)) { return; } } writeRGBTo(out); } follows the writeRGBTo() path instead of the previous optimizedWriteTo() path. The end result is a 40% performance impact for the PNG file I have been testing with when going from jdk1.6_13 to a more recent one, like jdk1.6_30. Any ideas on how to recover the previous performance (i.e., use the optimizedWriteTo() path)? Luis