欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java程序读写png文件的元数据,java读写png元数据,在java中可以是用co

来源: javaer 分享于  点击 42431 次 点评:266

java程序读写png文件的元数据,java读写png元数据,在java中可以是用co


在java中可以是用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;}
相关栏目:

用户点评