Метаданные экстрактор Java не извлекает EXIF ​​или Iptc

Я пытаюсь получить EXIF ​​изображения JPEG, но это не работает. Сначала я читаю свое изображение с помощью BufferedImage и преобразовываю его в файл, а затем применяю тот же код, что и здесь: https://code.google.com/p/metadata-extractor/source/browse/Samples/com/drew/metadata/SampleUsage.java?name=2.5.1. Что я делаю неправильно? Почему JpegSegmentReader.SEGMENT_APP1 возвращает ноль?

    File outfile = new File("image.jpg");
    ImageIO.write(imagine, "jpg", outfile);
    try{
            JpegSegmentReader segmentReader = new JpegSegmentReader(outfile);
            byte[] exifSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APP1);
            System.out.println(Arrays.toString(segmentReader.readSegment(JpegSegmentReader.SEGMENT_APP1)));
            byte[] iptcSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APPD);
            Metadata metadata = new Metadata();
            if (exifSegment != null)
                new ExifReader().extract(new ByteArrayReader(exifSegment), metadata);
            if (iptcSegment != null)
                new IptcReader().extract(new ByteArrayReader(iptcSegment), metadata);
            printImageTags(metadata);
        }catch (JpegProcessingException e) {
            System.err.println("error 3a: " + e);
        }

1 ответ

Решение

ImageIO.write() не записывает метаданные Exif * (APP1/Exif). Он хранит только JFIF (для получения дополнительной информации о Exif/JFIF, см. JPEG на WikiPedia) в сегменте APP0. Из-за этого в вашем коде никогда не будет сегмента APP1.

Также нет метаданных Exif в BufferedImage или же RenderedImage что вы пишете, так как объекты этих типов содержат только данные пикселей.

Если вы хотите извлечь метаданные Exif, вам нужно найти ссылку на исходный файл, который вы прочитали изображение (imagine) и прочитайте оттуда.

*) ImageIO и стандарт JPEGImageWriter может записывать метаданные Exif, но только если вы передаете метаданные Exif разработчику, используя IIOMetadata API. Но я не думаю, что это актуально для вашего варианта использования.

Другие вопросы по тегам