我正在开发一个程序,该程序本质上将是专门用于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/