我正在开发一个程序,该程序本质上将是专门用于JPEG图像的 EXIF数据标记

GUI将由一个搜索框,一个加载按钮和一个显示EXIF数据的显示框组成。但是我遇到了读者的一个问题:

public class MetaRead {
    public String readCustomData(byte[] imageData, String key) throws IOException{
        ImageReader imageReader = ImageIO.getImageReadersByFormatName("JPEG").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

        JPEGMetadata JPEGmeta = (JPEGMetadata) metadata;
        NodeList childNodes = JPEGmeta.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;
    }
}

我在{JPEGMetadata JPEGmeta = (JPEGMetadata metadata;} 遇到错误“无法将JPEGMetadata解析为类型”

原始代码是用于PNG的,因此我用查找/替换用JPEG替换了所有PNG。

最佳答案

好吧我不直言不讳地解释这一点。

在编程中,您不能仅将对象PNGMetadata的名称更改为JPEGMetadata并期望它可以工作。

您会看到,对象PNGMetadata被开发为只能用于PNG图像。您不能只是将名称更改为JPEG并期望它能正常工作。

如果您需要一些适用于JPEG的内容,我建议您使用一个库来读取JPEG元数据。请参阅下面的链接。

https://drewnoakes.com/code/exif/

09-25 16:49