下面列出了javax.imageio.ImageReader#getImageMetadata ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public void runTest(Object ctx, int numReps) {
final Context ictx = (Context)ctx;
final ImageReader reader = ictx.reader;
final boolean seekForwardOnly = ictx.seekForwardOnly;
final boolean ignoreMetadata = ictx.ignoreMetadata;
do {
try {
ImageInputStream iis = ictx.createImageInputStream();
reader.setInput(iis, seekForwardOnly, ignoreMetadata);
reader.getImageMetadata(0);
reader.reset();
iis.close();
ictx.closeOriginalStream();
} catch (IOException e) {
e.printStackTrace();
}
} while (--numReps >= 0);
}
public void runTest(Object ctx, int numReps) {
final Context ictx = (Context)ctx;
final ImageReader reader = ictx.reader;
final boolean seekForwardOnly = ictx.seekForwardOnly;
final boolean ignoreMetadata = ictx.ignoreMetadata;
do {
try {
ImageInputStream iis = ictx.createImageInputStream();
reader.setInput(iis, seekForwardOnly, ignoreMetadata);
reader.getImageMetadata(0);
reader.reset();
iis.close();
ictx.closeOriginalStream();
} catch (IOException e) {
e.printStackTrace();
}
} while (--numReps >= 0);
}
public void runTest(Object ctx, int numReps) {
final Context ictx = (Context)ctx;
final ImageReader reader = ictx.reader;
final boolean seekForwardOnly = ictx.seekForwardOnly;
final boolean ignoreMetadata = ictx.ignoreMetadata;
do {
try {
ImageInputStream iis = ictx.createImageInputStream();
reader.setInput(iis, seekForwardOnly, ignoreMetadata);
reader.getImageMetadata(0);
reader.reset();
iis.close();
ictx.closeOriginalStream();
} catch (IOException e) {
e.printStackTrace();
}
} while (--numReps >= 0);
}
public void runTest(Object ctx, int numReps) {
final Context ictx = (Context)ctx;
final ImageReader reader = ictx.reader;
final boolean seekForwardOnly = ictx.seekForwardOnly;
final boolean ignoreMetadata = ictx.ignoreMetadata;
do {
try {
ImageInputStream iis = ictx.createImageInputStream();
reader.setInput(iis, seekForwardOnly, ignoreMetadata);
reader.getImageMetadata(0);
reader.reset();
iis.close();
ictx.closeOriginalStream();
} catch (IOException e) {
e.printStackTrace();
}
} while (--numReps >= 0);
}
public static IIOMetadata getIIOMetadata(File file) {
try {
try ( ImageInputStream iis = ImageIO.createImageInputStream(file)) {
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
if (readers.hasNext()) {
ImageReader reader = readers.next();
reader.setInput(iis, false);
IIOMetadata iioMetaData = reader.getImageMetadata(0);
reader.dispose();
return iioMetaData;
}
}
return null;
} catch (Exception e) {
logger.error(e.toString());
return null;
}
}
public void runTest(Object ctx, int numReps) {
final Context ictx = (Context)ctx;
final ImageReader reader = ictx.reader;
final boolean seekForwardOnly = ictx.seekForwardOnly;
final boolean ignoreMetadata = ictx.ignoreMetadata;
do {
try {
ImageInputStream iis = ictx.createImageInputStream();
reader.setInput(iis, seekForwardOnly, ignoreMetadata);
reader.getImageMetadata(0);
reader.reset();
iis.close();
ictx.closeOriginalStream();
} catch (IOException e) {
e.printStackTrace();
}
} while (--numReps >= 0);
}
public void runTest(Object ctx, int numReps) {
final Context ictx = (Context)ctx;
final ImageReader reader = ictx.reader;
final boolean seekForwardOnly = ictx.seekForwardOnly;
final boolean ignoreMetadata = ictx.ignoreMetadata;
do {
try {
ImageInputStream iis = ictx.createImageInputStream();
reader.setInput(iis, seekForwardOnly, ignoreMetadata);
reader.getImageMetadata(0);
reader.reset();
iis.close();
ictx.closeOriginalStream();
} catch (IOException e) {
e.printStackTrace();
}
} while (--numReps >= 0);
}
public void runTest(Object ctx, int numReps) {
final Context ictx = (Context)ctx;
final ImageReader reader = ictx.reader;
final boolean seekForwardOnly = ictx.seekForwardOnly;
final boolean ignoreMetadata = ictx.ignoreMetadata;
do {
try {
ImageInputStream iis = ictx.createImageInputStream();
reader.setInput(iis, seekForwardOnly, ignoreMetadata);
reader.getImageMetadata(0);
reader.reset();
iis.close();
ictx.closeOriginalStream();
} catch (IOException e) {
e.printStackTrace();
}
} while (--numReps >= 0);
}
public static File createImage(File imageFile, String imageFormat) {
File tempFile = null;
try {
Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(imageFormat);
ImageReader reader = readers.next();
ImageInputStream iis = ImageIO.createImageInputStream(imageFile);
reader.setInput(iis);
// Read the stream metadata
IIOMetadata streamMetadata = reader.getStreamMetadata();
// Set up the writeParam
TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.US);
tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED);
// Get tif writer and set output to file
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");
ImageWriter writer = writers.next();
BufferedImage bi = reader.read(0);
IIOImage image = new IIOImage(bi, null, reader.getImageMetadata(0));
tempFile = tempImageFile(imageFile);
ImageOutputStream ios = ImageIO.createImageOutputStream(tempFile);
writer.setOutput(ios);
writer.write(streamMetadata, image, tiffWriteParam);
ios.close();
writer.dispose();
reader.dispose();
} catch (Exception exc) {
exc.printStackTrace();
}
return tempFile;
}
public static File createImage(File imageFile, String imageFormat) {
File tempFile = null;
try {
Iterator<ImageReader> readers = ImageIO
.getImageReadersByFormatName(imageFormat);
ImageReader reader = readers.next();
ImageInputStream iis = ImageIO.createImageInputStream(imageFile);
reader.setInput(iis);
// Read the stream metadata
IIOMetadata streamMetadata = reader.getStreamMetadata();
// Set up the writeParam
TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(
Locale.US);
tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED);
// Get tif writer and set output to file
Iterator<ImageWriter> writers = ImageIO
.getImageWritersByFormatName("tiff");
ImageWriter writer = writers.next();
BufferedImage bi = reader.read(0);
// bi = new ImageFilter(bi).changeGrey();
IIOImage image = new IIOImage(bi, null, reader.getImageMetadata(0));
tempFile = tempImageFile(imageFile);
ImageOutputStream ios = ImageIO.createImageOutputStream(tempFile);
writer.setOutput(ios);
writer.write(streamMetadata, image, tiffWriteParam);
ios.close();
writer.dispose();
reader.dispose();
} catch (Exception exc) {
exc.printStackTrace();
}
return tempFile;
}
private static ImageAndResolution readAndDisplayMetadataJPEG(DSSDocument image) throws IOException {
try (InputStream is = image.openStream(); ImageInputStream iis = ImageIO.createImageInputStream(is)) {
ImageReader reader = getImageReader("jpeg");
// attach source to the reader
reader.setInput(iis, true);
int hdpi = DEFAULT_DPI;
int vdpi = DEFAULT_DPI;
if (isSupportedColorSpace(reader)) {
// read metadata of first image
IIOMetadata metadata = reader.getImageMetadata(0);
Element root = (Element) metadata.getAsTree("javax_imageio_jpeg_image_1.0");
NodeList elements = root.getElementsByTagName("app0JFIF");
Element e = (Element) elements.item(0);
hdpi = Integer.parseInt(e.getAttribute("Xdensity"));
vdpi = Integer.parseInt(e.getAttribute("Ydensity"));
} else {
LOG.warn("Cannot read metadata of the image with name [{}]. The color space is not supported. "
+ "Using the default dpi with value [{}]", image.getName(), DEFAULT_DPI);
}
return new ImageAndResolution(image, hdpi, vdpi);
}
}
public static IIOMetadata getTiffIIOMetadata(File file) {
try {
ImageReader reader = ImageIO.getImageReadersByFormatName("tif").next();
try (ImageInputStream iis = ImageIO.createImageInputStream(file)) {
reader.setInput(iis, false);
IIOMetadata metadata = reader.getImageMetadata(0);
reader.dispose();
return metadata;
}
} catch (Exception e) {
logger.error(e.toString());
return null;
}
}
public static void main(String args[]) throws Exception {
Iterator<ImageReader> readers = ImageIO.getImageReadersBySuffix("simp");
ImageReader simpReader = null;
if (readers.hasNext()) {
simpReader = readers.next();
System.out.println("reader="+simpReader);
}
if (simpReader == null) {
throw new RuntimeException("Reader not found.");
}
ImageReaderSpi spi = simpReader.getOriginatingProvider();
IIOMetadataFormat spiFmt =
spi.getImageMetadataFormat("simp_metadata_1.0");
System.out.println("fmt from SPI=" + spiFmt);
ByteArrayInputStream bais = new ByteArrayInputStream(simpData);
ImageInputStream iis = new MemoryCacheImageInputStream(bais);
simpReader.setInput(iis);
BufferedImage bi = simpReader.read(0);
System.out.println(bi);
IIOMetadata metadata = simpReader.getImageMetadata(0);
System.out.println("Image metadata="+metadata);
IIOMetadataFormat format =
metadata.getMetadataFormat("simp_metadata_1.0");
System.out.println("Image metadata format="+format);
if (format == null) {
throw new RuntimeException("MetadataFormat not found.");
}
}
static String getDisposalMethod(ImageReader reader, int num) throws IOException {
IIOMetadata meta = reader.getImageMetadata(num);
Node parent = meta.getAsTree("javax_imageio_gif_image_1.0");
//printNodeTree(parent);
NodeList root = parent.getChildNodes();
for(int iter = 0 ; iter < root.getLength() ; iter++) {
Node n = root.item(iter);
if(n.getNodeName().equals("GraphicControlExtension")) {
return n.getAttributes().getNamedItem("disposalMethod").getNodeValue();
}
}
return null;
}
@Execute
public void readExif() throws IOException {
ImageReader reader = ExifUtil.findReader();
reader.setInput(new FileImageInputStream(new File(file)));
IIOMetadata imageMetadata = reader.getImageMetadata(0);
parseExifMeta(imageMetadata);
}
public static void main(String[] args) throws IOException {
// Generate some trivial image and save it to a temporary array
ByteArrayOutputStream tmp = new ByteArrayOutputStream();
ImageIO.write(new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB),
"gif", tmp);
// Read it back in
ImageInputStream in = new MemoryCacheImageInputStream(
new ByteArrayInputStream(tmp.toByteArray()));
ImageReader reader = ImageIO.getImageReaders(in).next();
reader.setInput(in);
// Retrieve standard image metadata tree
IIOMetadata meta = reader.getImageMetadata(0);
if (meta == null || !meta.isStandardMetadataFormatSupported()) {
throw new Error("Test failure: Missing metadata");
}
Element root = (Element) meta.
getAsTree(IIOMetadataFormatImpl.standardMetadataFormatName);
NodeList nodeList = root.
getElementsByTagName(root.getFirstChild().getNodeName());
/*
* Accessing the nth node should return null and not throw
* IndexOutOfBoundsException.
*/
Node n = (nodeList.item(nodeList.getLength()));
}
public void doTest() {
try {
System.out.println(this.getDescription());
if (param.getCompressionMode() != ImageWriteParam.MODE_EXPLICIT) {
System.out.println("Warning: compression mode is not MODE_EXPLICIT");
}
// change metadata according to ImageWriteParam
IIOMetadata new_meta = iw.convertImageMetadata(meta, new ImageTypeSpecifier(img), param);
IIOImage iio_img = new IIOImage(img, null, new_meta);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
iw.setOutput(ios);
System.out.print("write image...");
System.out.println("Current compression Type is \""+param.getCompressionType()+"\"");
iw.write(new_meta, iio_img, param);
//iw.write(iio_img);
System.out.println("OK");
System.out.print("read image ... ");
ios.flush();
byte[] ba_image = baos.toByteArray();
System.out.println("Array length=" + ba_image.length);
FileOutputStream fos = new FileOutputStream(new File(param.getCompressionType()+".bmp"));
fos.write(ba_image);
fos.flush();
fos = null;
ByteArrayInputStream bais = new ByteArrayInputStream(ba_image);
ImageReader ir = ImageIO.getImageReader(iw);
ir.setInput(ImageIO.createImageInputStream(bais));
BufferedImage res = ir.read(0);
System.out.println("OK");
if (!param.getCompressionType().equals("BI_JPEG")) {
System.out.print("compare images ... ");
boolean r = compare(img,res);
System.out.println(r?"OK":"FAILED");
if (!r) {
throw new RuntimeException("Compared images are not equals. Test failed.");
}
}
BMPMetadata mdata = (BMPMetadata)ir.getImageMetadata(0);
if (!param.getCompressionType().equals(param.getCompressionTypes()[mdata.compression])) {
throw new RuntimeException("Different compression value");
}
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException("Unexpected exception: " + ex);
}
}
private void initializeAnnotations() throws FileNotFoundException, IOException {
ImageInputStream iis = ImageIO.createImageInputStream(imageFile);
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
if (readers.hasNext()) {
ImageReader reader = (ImageReader) readers.next();
reader.setInput(iis);
image = reader.read(0);
IIOMetadata imageMetadata = reader.getImageMetadata(0);
Node root = imageMetadata.getAsTree(imageMetadata.getNativeMetadataFormatName());
NodeList childNodes = root.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node item = childNodes.item(i);
if (item.getNodeName().equals("tEXt")) {
Node textNode = item;
NodeList entryNodes = textNode.getChildNodes();
for (int j = 0; j < entryNodes.getLength(); j++) {
Node entry = entryNodes.item(j);
if (entry.getNodeName().equals("tEXtEntry")) {
NamedNodeMap attributes = entry.getAttributes();
String kw = attributes.getNamedItem("keyword").getNodeValue();
String value = attributes.getNamedItem("value").getNodeValue();
Pattern p = Pattern.compile("a1810-(\\d+)-(\\d+)-(\\d+)-(\\d+)-(\\d+)");
Matcher matcher = p.matcher(kw);
if (matcher.matches()) {
Rectangle rect = new Rectangle(Integer.parseInt(matcher.group(2)),
Integer.parseInt(matcher.group(3)), Integer.parseInt(matcher.group(4)),
Integer.parseInt(matcher.group(5)));
int index = Integer.parseInt(matcher.group(1));
Annotation annotation = new Annotation(index, rect);
annotation.setText(value);
annotations.add(annotation);
Collections.sort(annotations, new Comparator<Annotation>() {
public int compare(Annotation o1, Annotation o2) {
return o1.getIndex() - o2.getIndex();
}
});
}
}
}
}
}
reader.dispose();
}
}
public static void test(String mimeType, boolean useStreamMeta,
String metaXml, String... boolXpaths)
throws Exception
{
BufferedImage img =
new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB);
ImageWriter iw = ImageIO.getImageWritersByMIMEType(mimeType).next();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageOutputStream ios = new MemoryCacheImageOutputStream(os);
iw.setOutput(ios);
ImageWriteParam param = null;
IIOMetadata streamMeta = iw.getDefaultStreamMetadata(param);
IIOMetadata imageMeta =
iw.getDefaultImageMetadata(new ImageTypeSpecifier(img), param);
IIOMetadata meta = useStreamMeta ? streamMeta : imageMeta;
Source src = new StreamSource(new StringReader(metaXml));
DOMResult dst = new DOMResult();
transform(src, dst);
Document doc = (Document)dst.getNode();
Element node = doc.getDocumentElement();
String metaFormat = node.getNodeName();
// Verify that the default metadata gets formatted correctly.
verify(meta.getAsTree(metaFormat), boolXpaths, false);
meta.mergeTree(metaFormat, node);
// Verify that the merged metadata gets formatte correctly.
verify(meta.getAsTree(metaFormat), boolXpaths, true);
iw.write(streamMeta, new IIOImage(img, null, imageMeta), param);
iw.dispose();
ios.close();
ImageReader ir = ImageIO.getImageReader(iw);
byte[] bytes = os.toByteArray();
if (bytes.length == 0)
throw new AssertionError("Zero length image file");
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
ImageInputStream iis = new MemoryCacheImageInputStream(is);
ir.setInput(iis);
if (useStreamMeta) meta = ir.getStreamMetadata();
else meta = ir.getImageMetadata(0);
// Verify again after writing and re-reading the image
verify(meta.getAsTree(metaFormat), boolXpaths, true);
}
public static void test(String mimeType, boolean useStreamMeta,
String metaXml, String... boolXpaths)
throws Exception
{
BufferedImage img =
new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB);
ImageWriter iw = ImageIO.getImageWritersByMIMEType(mimeType).next();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageOutputStream ios = new MemoryCacheImageOutputStream(os);
iw.setOutput(ios);
ImageWriteParam param = null;
IIOMetadata streamMeta = iw.getDefaultStreamMetadata(param);
IIOMetadata imageMeta =
iw.getDefaultImageMetadata(new ImageTypeSpecifier(img), param);
IIOMetadata meta = useStreamMeta ? streamMeta : imageMeta;
Source src = new StreamSource(new StringReader(metaXml));
DOMResult dst = new DOMResult();
transform(src, dst);
Document doc = (Document)dst.getNode();
Element node = doc.getDocumentElement();
String metaFormat = node.getNodeName();
// Verify that the default metadata gets formatted correctly.
verify(meta.getAsTree(metaFormat), boolXpaths, false);
meta.mergeTree(metaFormat, node);
// Verify that the merged metadata gets formatte correctly.
verify(meta.getAsTree(metaFormat), boolXpaths, true);
iw.write(streamMeta, new IIOImage(img, null, imageMeta), param);
iw.dispose();
ios.close();
ImageReader ir = ImageIO.getImageReader(iw);
byte[] bytes = os.toByteArray();
if (bytes.length == 0)
throw new AssertionError("Zero length image file");
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
ImageInputStream iis = new MemoryCacheImageInputStream(is);
ir.setInput(iis);
if (useStreamMeta) meta = ir.getStreamMetadata();
else meta = ir.getImageMetadata(0);
// Verify again after writing and re-reading the image
verify(meta.getAsTree(metaFormat), boolXpaths, true);
}