Чтение ключевых слов в xmp из png с помощью Java

Я пытаюсь добавить ключевые слова в файл изображения PNG в Photoshop с помощью Java.

Я попробовал этот метод, используя imageio в Java:

http://johnbokma.com/java/obtaining-image-metadata.html

Однако все, что я получаю, это следующее:

Format name: javax_imageio_png_1.0
<javax_imageio_png_1.0>
    <IHDR width="128" height="128" bitDepth="8" colorType="RGBAlpha" compressionMethod="deflate" filterMethod="adaptive" interlaceMethod="none"/>
    <cHRM whitePointX="31269" whitePointY="32899" redX="63999" redY="33001" greenX="30000" greenY="60000" blueX="15000" blueY="5999"/>
    <iCCP profileName="Photoshop ICC profile" compressionMethod="deflate"/>
    <pHYs pixelsPerUnitXAxis="2835" pixelsPerUnitYAxis="2835" unitSpecifier="meter"/>
</javax_imageio_png_1.0>
Format name: javax_imageio_1.0
<javax_imageio_1.0>
    <Chroma>
        <ColorSpaceType name="RGB"/>
        <NumChannels value="4"/>
        <BlackIsZero value="TRUE"/>
    </Chroma>
    <Compression>
        <CompressionTypeName value="deflate"/>
        <Lossless value="TRUE"/>
        <NumProgressiveScans value="1"/>
    </Compression>
    <Data>
        <PlanarConfiguration value="PixelInterleaved"/>
        <SampleFormat value="UnsignedIntegral"/>
        <BitsPerSample value="8 8 8 8"/>
    </Data>
    <Dimension>
        <PixelAspectRatio value="1.0"/>
        <ImageOrientation value="Normal"/>
        <HorizontalPixelSize value="0.35273367"/>
        <VerticalPixelSize value="0.35273367"/>
    </Dimension>
    <Transparency>
        <Alpha value="nonpremultipled"/>
    </Transparency>
</javax_imageio_1.0>

Ничего о ключевых словах не добавлено...

Я не правильно делаю? Эта библиотека не получает метаданные XMP?

РЕДАКТИРОВАТЬ:

Хотя я бы предпочел узнать, может ли стандартная библиотека читать метаданные, я попробовал библиотеку pngj. Но это дало мне следующую ошибку:

Exception in thread "main" ar.com.hjg.pngj.PngjExceptionInternal: this should not happen
    at ar.com.hjg.pngj.PngIDatChunkInputStream.read(PngIDatChunkInputStream.java:117)
    at ar.com.hjg.pngj.PngReader.readSkippingAllRows(PngReader.java:777)
    at se.expertinfo.ditaplugin.ImageMetadata.showChunks(ImageMetadata.java:105)
    at se.expertinfo.ditaplugin.DitaPlugin.printImageMetadata(DitaPlugin.java:33)
    at se.expertinfo.ditaplugin.DitaPlugin.main(DitaPlugin.java:24)
Java Result: 1

Если я закомментирую pngr.readSkippingAllRows(); (что может, насколько я знаю, сделать метод бесполезным?) Я получаю следующий результат:

filename=architecture3.png ImageInfo [cols=128, rows=128, bitDepth=8, channels=4, bitspPixel=32, bytesPixel=4, bytesPerRow=512, samplesPerRow=512, samplesPerRowP=512, alpha=true, greyscale=false, indexed=false, packed=false]
ChunkList: read: 5
 Read:
chunk id= IHDR (len=13 offset=8) c=PngChunkIHDR G=0
chunk id= pHYs (len=9 offset=33) c=PngChunkPHYS G=1
chunk id= iCCP (len=2639 offset=54) c=PngChunkICCP G=1
chunk id= cHRM (len=32 offset=2705) c=PngChunkCHRM G=1
chunk id= IDAT (len=25329 offset=2749) c=PngChunkIDAT G=4

BUILD SUCCESSFUL (total time: 0 seconds)

т.е. ни слова о ключевых словах там...

Кстати: вот набор метаданных в Photoshop. Те же метаданные отображаются на вкладке IPTC...

Метаданные в Photoshop

РЕДАКТИРОВАТЬ 2: В ответ на leonbloy:

Добавлены заголовок и автор, но вывод по-прежнему отсутствует (хотя я получаю IEND):

имя_файла=architecture3.png ImageInfo [столбцы=128, строки=128, bitDepth=8, каналы=4, bitspPixel=32, bytesPixel=4, bytesPerRow=512, SamplePerRow=512, SamplePerRowP=512, альфа=истина, оттенки серого=ложь , индексированный = ложь, упакованный = ложь] ChunkList: прочитано: 6 Прочитано: идентификатор фрагмента = IHDR (длина = 13, смещение = 8) c = PngChunkIHDR G = 0 идентификатор фрагмента = pHYs (длина = 9, смещение = 33) c = PngChunkPHYS G =1 идентификатор фрагмента= iCCP (len=2639 offset=54) c=PngChunkICCP G=1 идентификатор фрагмента= cHRM (len=32 offset=2705) c=PngChunkCHRM G=1 идентификатор фрагмента= IDAT (len=25329 offset=2749) c=PngChunkIDAT G=4 идентификатор чанка= IEND (len=0 offset=28090) c=PngChunkIEND G=6

Я вижу добавленные метаданные в Adobe Bridge...

РЕДАКТИРОВАТЬ 3:

Ну, у меня нет этому объяснения, но внезапно библиотека javax.imageio работает нормально! Я получаю все метаданные, как и ожидалось, и я даже не знаю, нужно ли вносить в них какие-либо изменения.

Мне просто не хватает одной вещи - мне бы хотелось иметь возможность получать метаданные в парах ключ/значение, например Product=Apple, но я не могу найти такой способ добавления метаданных. Доступно ли это каким-то образом, и как мне добраться до него?


person Anders    schedule 03.12.2012    source источник
comment
Вы уверены, что у изображения больше метаданных? Чтобы заглянуть в него, используйте этот замечательный инструмент: entropymine.com/jason/tweakpng   -  person leonbloy    schedule 03.12.2012
comment
Я уверен, что он там, когда я смотрю на него в Photoshop. Он добавлен в диалоговое окно Информация о файле (работает на XMP). К сожалению, я не могу использовать инструмент, который вы предлагаете, потому что я на Mac, а не на Windows.   -  person Anders    schedule 03.12.2012
comment
Вы также можете попробовать мой PNGJ code.google.com/p/pngj: вот примерв котором перечислены все куски   -  person leonbloy    schedule 03.12.2012
comment
Я задам вопрос сегодня вечером, а пока попробуйте заменить pngr.readSkippingAllRows(); на pngr.readRow(pngr.imgInfo.rows-1);   -  person leonbloy    schedule 03.12.2012
comment
Хорошо, спасибо, но это дало мне почти те же результаты, что и когда я только что прокомментировал это выше, с парой небольших отличий. Тем не менее, ничего о метаданных ключевых слов...   -  person Anders    schedule 03.12.2012
comment
IT должен показать кусок IEND как последний. Если это так, то фрагменты были прочитаны нормально, и ваши метаданные не находятся внутри PNG. Попробуйте написать некоторые данные (автор, название) в приведенном выше диалоговом окне, сохраните PNG и откройте его (желательно на другом компьютере) и посмотрите, появится ли он.   -  person leonbloy    schedule 03.12.2012
comment
возможный дубликат Поддерживаются ли метаданные XMP в изображениях PNG?   -  person Paul Sweatte    schedule 08.08.2014