public String readCustomData(byte[] imageData, String key) throws IOException{ ImageReader imageReader = ImageIO.getImageReadersByFormatName("png").next(); imageReader.setInput(ImageIO.createImageInputStream(new ByteArrayInputStream(imageData)), true); // read metadata of first image IIOMetadata metadata = imageReader.getImageMetadata(0); //this cast helps getting the contents PNGMetadata pngmeta = (PNGMetadata) metadata; NodeList childNodes = pngmeta.getStandardTextNode().getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { Node node = childNodes.item(i); String keyword = node.getAttributes().getNamedItem("keyword").getNodeValue(); String value = node.getAttributes().getNamedItem("value").getNodeValue(); if(key.equals(keyword)){ return value; } } return null; }
/** * The metadata of PNG and JPEG can contain the width of a pixel in millimeters. * Return the the "effective" dpi calculated as <code>25.4/HorizontalPixelSize</code> * and <code>25.4/VerticalPixelSize</code>. Where 25.4 is the number of mm in inch. * * @return array of two elements: <code>{horisontalPdi, verticalDpi}</code>. * {96, 96} is the default. */ public static int[] getResolution(ImageReader r) throws IOException { int hdpi=96, vdpi=96; double mm2inch = 25.4; NodeList lst; Element node = (Element)r.getImageMetadata(0).getAsTree("javax_imageio_1.0"); lst = node.getElementsByTagName("HorizontalPixelSize"); if(lst != null && lst.getLength() == 1) hdpi = (int)(mm2inch/Float.parseFloat(((Element)lst.item(0)).getAttribute("value"))); lst = node.getElementsByTagName("VerticalPixelSize"); if(lst != null && lst.getLength() == 1) vdpi = (int)(mm2inch/Float.parseFloat(((Element)lst.item(0)).getAttribute("value"))); return new int[]{hdpi, vdpi}; }
public void readAndDisplayMetadata(File file) throws IOException { final ImageInputStream iis = ImageIO.createImageInputStream(file); final Iterator<ImageReader> readers = ImageIO.getImageReaders(iis); if (readers.hasNext()) { // pick the first available ImageReader final ImageReader reader = readers.next(); // attach source to the reader reader.setInput(iis, true); // read metadata of first image final IIOMetadata metadata = reader.getImageMetadata(0); final String[] names = metadata.getMetadataFormatNames(); final int length = names.length; for (int i = 0; i < length; i++) { displayMetadata(metadata.getAsTree(names[i])); } } }
IIOMetadata metadata = reader.getImageMetadata(imageIndex); Node rootNode = metadata.getAsTree("javax_imageio_jpeg_image_1.0");
public String getData() throws IOException { final ImageInputStream iis = ImageIO.createImageInputStream(source); final Iterator<ImageReader> readers = ImageIO.getImageReaders(iis); if (readers.hasNext()) { // pick the first available ImageReader final ImageReader reader = readers.next(); // attach source to the reader reader.setInput(iis, true); // read metadata of first image final IIOMetadata metadata = reader.getImageMetadata(0); final String[] names = metadata.getMetadataFormatNames(); final int length = names.length; for (int i = 0; i < length; i++) { final String result = displayMetadata(metadata.getAsTree(names[i])); if (result != null) { return result; } } } return null; }
private int getDelayTime(ImageReader reader, int imageIndex) throws IOException { IIOMetadata metadata = reader.getImageMetadata(imageIndex); IIOMetadataNode root = (IIOMetadataNode) metadata .getAsTree(metadata.getNativeMetadataFormatName()); IIOMetadataNode extension = findNode(root, "GraphicControlExtension"); String attribute = (extension != null) ? extension.getAttribute("delayTime") : null; return (attribute != null) ? Integer.parseInt(attribute) * 10 : 0; }
IIOMetadata readMetadata() throws IOException { ImageInputStream input = new ByteArrayImageInputStream(segment.thumbnail); try { reader.setInput(input); return reader.getImageMetadata(0); } finally { input.close(); } }
private IIOMetadata readJPEGMetadataSafe(final ImageReader jpegReader) throws IOException { try { return jpegReader.getImageMetadata(0); } catch (IIOException e) { processWarningOccurred(String.format("Could not read metadata for JPEG compressed TIFF (%s). Colors may look incorrect", e.getMessage())); return null; } }
private String getNumChannels(ImageReader reader) { try { IIOMetadata imageMetadata = reader.getImageMetadata(0); if (imageMetadata == null) { return ""; } IIOMetadataNode metaTree = (IIOMetadataNode) imageMetadata.getAsTree("javax_imageio_1.0"); Element numChannelsItem = (Element) metaTree.getElementsByTagName("NumChannels").item(0); if (numChannelsItem == null) { return ""; } return numChannelsItem.getAttribute("value"); } catch (IOException | NegativeArraySizeException e) { LOG.debug("Couldn't read metadata - returning empty string", e); return ""; } }
private void setupNoData(ImageReader reader) throws IOException { // grabbing the nodata if possible int index = 0; if (originator != null) { Object imageIndex = originator.getAttribute("imageindex"); if (imageIndex instanceof Integer) { index = (Integer) imageIndex; } } try { IIOMetadata metadata = reader.getImageMetadata(index); if (metadata instanceof CoreCommonImageMetadata) { double[] noData = ((CoreCommonImageMetadata) metadata).getNoData(); if (noData != null) { this.noData = new NoDataContainer(noData); } } } catch (UnsupportedOperationException e) { // some imageio-ext plugin throw this because they do not support getting the metadata // instead of returning null if (LOGGER.isLoggable(Level.FINER)) { LOGGER.log( Level.FINER, "Failed to gather metadata, might not be fatal, some readers do not support it", e); } } }
final IIOMetadata metadata = reader.getImageMetadata(0); if (!(metadata instanceof GDALCommonIIOImageMetadata)) { throw new DataSourceException(
@Override public IIOMetadata getImageMetadata(int imageIndex) throws IOException { // checkBounds needed, as we catch the IndexOutOfBoundsException below. checkBounds(imageIndex); initHeader(imageIndex); IIOMetadata imageMetadata; if (isLossless()) { return new JPEGImage10Metadata(segments); } else { try { imageMetadata = delegate.getImageMetadata(0); } catch (IndexOutOfBoundsException knownIssue) { // TMI-101: 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); } catch (NegativeArraySizeException knownIssue) { // Most likely from com.sun.imageio.plugins.jpeg.SOSMarkerSegment throw new IIOException("Corrupt JPEG data: Bad component count", knownIssue); } if (imageMetadata != null && Arrays.asList(imageMetadata.getMetadataFormatNames()).contains(JPEGImage10MetadataCleaner.JAVAX_IMAGEIO_JPEG_IMAGE_1_0)) { if (metadataCleaner == null) { metadataCleaner = new JPEGImage10MetadataCleaner(this); } return metadataCleaner.cleanMetadata(imageMetadata); } } return imageMetadata; }
metadata.set("width", Integer.toString(reader.getWidth(0))); loadMetadata(reader.getImageMetadata(0), metadata);
reader.setInput(checkTest1); for (int i = 0; i < 3; i++) { Node metaData = reader.getImageMetadata(i) .getAsTree(TIFFMedataFormat.SUN_NATIVE_IMAGE_METADATA_FORMAT_NAME); short orientation = ((Number) expression.evaluate(metaData, XPathConstants.NUMBER)).shortValue(); reader.setInput(checkTest2); for (int i = 0; i < 3; i++) { Node metaData = reader.getImageMetadata(i) .getAsTree(TIFFMedataFormat.SUN_NATIVE_IMAGE_METADATA_FORMAT_NAME); short orientation = ((Number) expression.evaluate(metaData, XPathConstants.NUMBER)).shortValue();
reader.setInput(input); IIOMetadata original = origReader.getImageMetadata(0); IIOMetadataNode origTree = (IIOMetadataNode) original.getAsTree(JPEGImage10MetadataCleaner.JAVAX_IMAGEIO_JPEG_IMAGE_1_0); IIOMetadata cleaned = cleaner.cleanMetadata(origReader.getImageMetadata(0));
@Test public void testTranscodeWithMetadataCMYKtoCMYK() throws IOException { ImageWriter writer = createImageWriter(); ImageReader reader = ImageIO.getImageReader(writer); ByteArrayOutputStream stream = transcode(reader, getClassLoaderResource("/jpeg/cmyk-sample-multiple-chunk-icc.jpg"), writer, ColorSpace.TYPE_CMYK); reader.reset(); reader.setInput(new ByteArrayImageInputStream(stream.toByteArray())); BufferedImage image = reader.read(0); assertNotNull(image); assertEquals(100, image.getWidth()); assertEquals(100, image.getHeight()); IIOMetadata metadata = reader.getImageMetadata(0); IIOMetadataNode standard = (IIOMetadataNode) metadata.getAsTree(IIOMetadataFormatImpl.standardMetadataFormatName); NodeList colorSpaceType = standard.getElementsByTagName("ColorSpaceType"); assertEquals(1, colorSpaceType.getLength()); assertEquals("CMYK", ((IIOMetadataNode) colorSpaceType.item(0)).getAttribute("name")); }
jreReader.setInput(data.getInputStream()); IIOMetadata metadata = reader.getImageMetadata(0); continue; IIOMetadata jreMetadata = jreReader.getImageMetadata(0);
IIOMetadata reference = referenceReader.getImageMetadata(i);
@Test public void testProviderAndMetadataFormatNamesMatch() throws IOException { ImageReaderSpi provider = createProvider(); ImageReader reader = createReader(); reader.setInput(getTestData().get(0).getInputStream()); IIOMetadata imageMetadata = reader.getImageMetadata(0); if (imageMetadata != null) { assertEquals(provider.getNativeImageMetadataFormatName(), imageMetadata.getNativeMetadataFormatName()); } IIOMetadata streamMetadata = reader.getStreamMetadata(); if (streamMetadata != null) { assertEquals(provider.getNativeStreamMetadataFormatName(), streamMetadata.getNativeMetadataFormatName()); } reader.dispose(); }
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/progressive-adobe-sof-bands-dont-match-sos-band-count.jpg"))); IIOMetadata metadata = reader.getImageMetadata(0); assertNotNull(metadata);