栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用Java编写图像元数据,最好是PNG

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Java编写图像元数据,最好是PNG

几天前,我不得不做同样的事情。.我也没有在互联网上找到确切的解决方案,但看着这

com.sun.imageio.plugins.png.PNGmetadata
班课我可以取得一些结果。

要将自定义元数据写入PNG文件:

public byte[] writeCustomData(BufferedImage buffImg, String key, String value) throws Exception {    ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();    ImageWriteParam writeParam = writer.getDefaultWriteParam();    ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);    //adding metadata    IIOmetadata metadata = writer.getDefaultImagemetadata(typeSpecifier, writeParam);    IIOmetadataNode textEntry = new IIOmetadataNode("tEXtEntry");    textEntry.setAttribute("keyword", key);    textEntry.setAttribute("value", value);    IIOmetadataNode text = new IIOmetadataNode("tEXt");    text.appendChild(textEntry);    IIOmetadataNode root = new IIOmetadataNode("javax_imageio_png_1.0");    root.appendChild(text);    metadata.mergeTree("javax_imageio_png_1.0", root);    //writing the data    ByteArrayOutputStream baos = new ByteArrayOutputStream();    ImageOutputStream stream = ImageIO.createImageOutputStream(baos);    writer.setOutput(stream);    writer.write(metadata, new IIOImage(buffImg, null, metadata), writeParam);    stream.close();    return baos.toByteArray();}

然后,读取数据:

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;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452720.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号