File f = new File("/path/imagefile.jpg"); //Find a suitable ImageReader Iterator readers = ImageIO.getImageReadersByFormatName("JPEG"); ImageReader reader = null; while(readers.hasNext()) { reader = (ImageReader)readers.next(); if(reader.canReadRaster()) { break; } } //Stream the image file (the original CMYK image) ImageInputStream input = ImageIO.createImageInputStream(f); reader.setInput(input); //Read the image raster Raster raster = reader.readRaster(0, null); //Create a new RGB image BufferedImage bi = new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); //Fill the new image with the old raster bi.getRaster().setRect(raster);
reader.setInput(input); Raster raster = reader.readRaster(0, null); BufferedImage image = createJPEG4(raster); ByteArrayOutputStream out = new ByteArrayOutputStream();
checkAdobeMarker(file); profile = Sanselan.getICCProfile(file); WritableRaster raster = (WritableRaster) reader.readRaster(0, null); if (colorType == COLOR_TYPE_YCCK) convertYcckToCmyk(raster);
checkAdobeMarker(file); profile = Sanselan.getICCProfile(file); WritableRaster raster = (WritableRaster) reader.readRaster(0, null); if (colorType == COLOR_TYPE_YCCK) convertYcckToCmyk(raster);
private static Raster readJPEGRaster(InputStream stream) throws IOException { // find suitable image reader Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("JPEG"); ImageReader reader = null; while (readers.hasNext()) { reader = readers.next(); if (reader.canReadRaster()) { break; } } if (reader == null) { throw new MissingImageReaderException( "Cannot read JPEG image: a suitable JAI I/O image filter is not installed"); } try (ImageInputStream iis = ImageIO.createImageInputStream(stream)) { reader.setInput(iis); ImageIO.setUseCache(false); return reader.readRaster(0, null); } finally { reader.dispose(); } }
checkAdobeMarker(file); profile = Sanselan.getICCProfile(file); WritableRaster raster = (WritableRaster) reader.readRaster(0, null); if (colorType == COLOR_TYPE_YCCK) convertYcckToCmyk(raster);
@Override public Raster readRaster(final int imageIndex, final ImageReadParam param) throws IOException { checkBounds(imageIndex); initHeader(imageIndex); if (isLossless()) { // TODO: What about stream position? // TODO: Param handling: Reading as raster should support source region, subsampling etc. return new JPEGLosslessDecoderWrapper(this).readRaster(segments, imageInput); } try { return delegate.readRaster(0, param); } catch (IndexOutOfBoundsException knownIssue) { // com.sun.imageio.plugins.jpeg.JPEGBuffer doesn't do proper sanity check of input data. throw new IIOException("Corrupt JPEG data: Bad segment length", knownIssue); } }
raster = reader.readRaster(0, irp); raster = reader.readRaster(0, irp);
Raster raster = delegate.readRaster(0, param); // non-converted
Raster raster = jpegReader.readRaster(0, jpegParam); Raster raster = jpegReader.readRaster(0, jpegParam); normalizeColor(interpretation, ((DataBufferByte) raster.getDataBuffer()).getData()); destination.getRaster().setDataElements(offset.x, offset.y, raster); Raster raster = jpegReader.readRaster(0, jpegParam); normalizeColor(interpretation, ((DataBufferByte) raster.getDataBuffer()).getData()); destination.getRaster().setDataElements(offset.x, offset.y, raster);
File f = new File("/path/imagefile.jpg"); //Find a suitable ImageReader Iterator readers = ImageIO.getImageReadersByFormatName("JPEG"); ImageReader reader = null; while(readers.hasNext()) { reader = (ImageReader)readers.next(); if(reader.canReadRaster()) { break; } } //Stream the image file (the original CMYK image) ImageInputStream input = ImageIO.createImageInputStream(f); reader.setInput(input); //Read the image raster Raster raster = reader.readRaster(0, null); //Create a new RGB image BufferedImage bi = new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); //Fill the new image with the old raster bi.getRaster().setRect(raster);
/** * ImageIO cannot read CMYK-jpegs, it throws IIOException(Unsupported Image Type). * This method tries to read cmyk image. * @param file * @return image TYPE_4BYTE_ABGR * @throws Exception */ public static BufferedImage readCMYKImage(File file) throws Exception { Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("JPEG"); ImageReader reader = null; while(readers.hasNext()) { reader = readers.next(); if(reader.canReadRaster()) break; } FileInputStream fis = new FileInputStream(file); try { ImageInputStream input = ImageIO.createImageInputStream(fis); reader.setInput(input); // original CMYK-jpeg stream Raster raster = reader.readRaster(0, null); // read image raster BufferedImage image = new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); image.getRaster().setRect(raster); return image; } finally { try { fis.close(); } catch(Exception ex) {} } }
private BufferedImage getFallbackBufferedImage(ImageReader reader, int pageIndex, ImageReadParam param) throws IOException { //Work-around found at: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4799903 //There are some additional ideas there if someone wants to go further. // Try reading a Raster (no color conversion). Raster raster = reader.readRaster(pageIndex, param); // Arbitrarily select a BufferedImage type. int imageType; int numBands = raster.getNumBands(); switch(numBands) { case 1: imageType = BufferedImage.TYPE_BYTE_GRAY; break; case 3: imageType = BufferedImage.TYPE_3BYTE_BGR; break; case 4: imageType = BufferedImage.TYPE_4BYTE_ABGR; break; default: throw new UnsupportedOperationException("Unsupported band count: " + numBands); } // Create a BufferedImage. BufferedImage bi = new BufferedImage(raster.getWidth(), raster.getHeight(), imageType); // Set the image data. bi.getRaster().setRect(raster); return bi; }
private Raster decompressRaster(int imageIndex, ImageReadParam param) throws IOException { if (!reader.canReadRaster()) { BufferedImage bi = reader.read(0, param); postDecompress(); return bi.getRaster(); } Raster raster = reader.readRaster(0, param); postDecompress(); return raster; }
reader.setInput(input); Raster raster = reader.readRaster(0, null); BufferedImage image = createJPEG4(raster); ByteArrayOutputStream out = new ByteArrayOutputStream();
private static Raster readJPEGRaster(InputStream stream) throws IOException { // find suitable image reader Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("JPEG"); ImageReader reader = null; while (readers.hasNext()) { reader = readers.next(); if (reader.canReadRaster()) { break; } } if (reader == null) { throw new MissingImageReaderException( "Cannot read JPEG image: a suitable JAI I/O image filter is not installed"); } try (ImageInputStream iis = ImageIO.createImageInputStream(stream)) { reader.setInput(iis); ImageIO.setUseCache(false); return reader.readRaster(0, null); } finally { reader.dispose(); } }
checkAdobeMarker(file); profile = Sanselan.getICCProfile(file); WritableRaster raster = (WritableRaster) reader.readRaster(0, null); if (colorType == COLOR_TYPE_YCCK) convertYcckToCmyk(raster);
reader.setInput(iis); ImageIO.setUseCache(false); return reader.readRaster(0, null);
@Override public Raster readRaster(final int imageIndex, final ImageReadParam param) throws IOException { checkBounds(imageIndex); initHeader(imageIndex); if (isLossless()) { // TODO: What about stream position? // TODO: Param handling: Reading as raster should support source region, subsampling etc. return new JPEGLosslessDecoderWrapper(this).readRaster(segments, imageInput); } try { return delegate.readRaster(0, param); } catch (IndexOutOfBoundsException knownIssue) { // com.sun.imageio.plugins.jpeg.JPEGBuffer doesn't do proper sanity check of input data. throw new IIOException("Corrupt JPEG data: Bad segment length", knownIssue); } }
final Raster raster = jpegReader.readRaster(0, param);