元数据提取器无法读取摄像机特定方向

时间:2017-01-05 11:31:45

标签: java image image-rotation metadata-extractor

我有一个包含2个Orientation属性的图像。当我尝试读取图像的元数据时,它总是从第二个方向属性中给出值。

有没有办法读取第一个方向值?

我附加了2个文件。 1是图像,2是文本文件形式的图像的元数据。

  1. 图像 enter image description here

  2. 元数据文件enter image description here

  3. 我使用的代码如下所示:

    public int getImage(String name,String outputFileName) throws ImageProcessingException, IOException {
    
            Metadata metadata;
            try {
                File f = new File(name);
                metadata = ImageMetadataReader.readMetadata(f);
    
                for (Directory directory : metadata.getDirectories()) {
                    for (Tag tag : directory.getTags()) {
    
                        if(tag.getTagName().equals("Orientation")){
                            final Integer index = directory.getInteger(274);
                            System.out.format("[%s] - %s = %s",
                                    directory.getName(), tag.getTagName(),index);
                            BufferedImage image = getRotatedImage(f,index);
                            File img = new File(outputFileName+".png");
                            ImageIO.write(image,"png",img);
                            //return 0;
    
                        }
                    }
                    if (directory.hasErrors()) {
                        for (String error : directory.getErrors()) {
                            System.err.format("ERROR: %s", error);
                        }
                    }
                }
            } catch (ImageProcessingException e) {
                System.out.println("Image processing exception while rotating image");
                throw e;
            } catch (IOException e) {
                System.out.println("IO exception while rotating image");
                throw e;
            }
            return 0;
        }
    

1 个答案:

答案 0 :(得分:0)

有两个方向,因为一个用于图像,另一个用于缩略图。

不是遍历所有目录,而是通过Metadata.getFirstDirectoryOfTypeMetadata.getDirectoriesOfType获取您想要的目录。然后,您可以直接向该目录询问标记的值。同样,没有必要迭代所有标签 - 这只会浪费资源(CPU /内存)。