Доступ к тегам jpeg с помощью java commons-imaging

Как я могу получить доступ (прочитать / записать) теги изображений jpeg с помощью обычная визуализация или санселан в java, этот ссылка на сайт имеет некоторые пояснения по теме.

Доступ к тегам jpeg с помощью java commons-imaging

Я попробовал следующий код, используя указанную библиотеку, пока sanselan, но никаких проблем.

public static void addImageHistoryTag(File file) {
    File dst = null;
    IImageMetadata metadata = null;
    JpegImageMetadata jpegMetadata = null;
    TiffImageMetadata exif = null;
    OutputStream os = null;
    TiffOutputSet outputSet = new TiffOutputSet();

    // establish metadata
    try {
        metadata = Sanselan.getMetadata(file);
    } catch (ImageReadException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    // establish jpegMedatadata
    if (metadata != null) {
        jpegMetadata = (JpegImageMetadata) metadata;
    }

    // establish exif
    if (jpegMetadata != null) {
        exif = jpegMetadata.getExif ();
    }

    // establish outputSet
    if (exif != null) {
        try {
            outputSet = exif.getOutputSet();
        } catch (ImageWriteException e) {
            e.printStackTrace();
        }
    }

    if (outputSet != null) {
        // check if field already EXISTS - if so remove
        TiffOutputField imageHistoryPre = outputSet
                .findField(TiffConstants.EXIF_TAG_XPCOMMENT);
        if (imageHistoryPre != null) {
            System.out.println("REMOVE");
            outputSet.removeField(TiffConstants.EXIF_TAG_XPCOMMENT);
        }
        // add field
        try {
            String fieldData = "Hallo";
            TiffOutputField imageHistory = new TiffOutputField(
                    TiffConstants.EXIF_TAG_XPTITLE,
                    TiffFieldTypeConstants.FIELD_TYPE_BYTE,
                    fieldData.length(),
                    fieldData.getBytes());

            TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory();
            exifDirectory.removeField(TiffConstants.EXIF_TAG_XPTITLE);
            exifDirectory.add(imageHistory);

        } catch (ImageWriteException e) {

            e.printStackTrace();
        }
    }

    try {
        dst = new File("D:\\aa\\111.jpeg");
        os = new FileOutputStream(dst);
        os = new BufferedOutputStream(os);
    } catch (IOException e) {
        e.printStackTrace();
    }

    // write/update EXIF metadata to output stream
    try {
        new ExifRewriter().updateExifMetadataLossless(file,
                os, outputSet);
    } catch (ImageReadException e) {
        e.printStackTrace();
    } catch (ImageWriteException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (IOException e) {
            }
        }
    }
}

Этот код не влияет на теги деталей изображения, поэтому я ищу правильную константу, которую можно использовать для доступа к «полю тегов».

Вы использовали тег [java]. Вы пробовали какой-нибудь код Java? Какую ошибку вы обнаружили?

Alfabravo 07.05.2018 22:03

@Alfabravo Я обновил вопрос, проверьте его

Karmel Zaidan 07.05.2018 22:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
131
1

Ответы 1

Если вы используете commons-imaging, не используйте Sanselan.getMetadata(file), используйте Imaging.getMetadata(file) для согласованности. Насколько мне известно, Sanselan не рекомендуется использовать для визуализации общего пользования.

Также вы можете попробовать установить MicrosoftTagConstants, в частности, EXIF_TAG_XPKEYWORDS. Для этого вам нужно использовать этот ответ.

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