Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT

3.5 Обработка Метаданных

Данные, хранившие в файле образа, который не представляет фактические пиксельные значения, упоминаются как метаданные. The javax.imageio.metadata пакет содержит классы и интерфейсы для того, чтобы получить доступ к метаданным.

Метаданные могут содержать сложные, иерархические структуры. Объектная модель XML-документов Java (ДОМ) API используется, чтобы представить эти структуры, разрешая разработчикам усилить их знание этих интерфейсов.

API ввода-вывода Изображения дифференцируется между потоковыми метаданными, которые связываются со всеми изображениями, сохраненными в файле образа, и метаданных изображения, которые связываются с единственным изображением. Для форматы изображения, которые содержат единственное изображение, только отобразите метаданные, используется.

Метаданные могут быть получены, вызывая ImageReader.getStreamMetadata и getImageMetadata(int imageIndex) методы. Они возвращают объект, который реализует IIOMetadata интерфейс. Фактический тип класса возвращенного объекта составил ImageReader, и обычно будет уникальный класс, используемый только тем читателем. Этот объект должен быть разработан, чтобы сохранить так много метаданных, позволенных форматом насколько возможно, настолько без потерь насколько возможно. Однако, эта точность к спецификациям формата изображения прибывает в стоимость, поскольку доступ к метаданным становится специфичным для формата.

Чтобы предоставить доступ к метаданным без потребности в специфичном для формата коде программы, IIOMetadata объекты представляют свою внутреннюю информацию в форме XML структура ДОМА, которая является по существу деревом узлов различных типов, которые могут содержать ряд атрибутов (String значения, к которым получают доступ по имени), и который может сослаться на ряд дочерних узлов.

Единственный плагин может поддерживать многократные форматы документа, которые отличает имя формата. Как правило, по крайней мере два формата будут поддерживаться данным плагином. Первым является общий, сменный нейтральный вызванный формат com.sun.imageio_1.0, который определяется в комментарии класса для IIOMetadata интерфейс. Вторым будет чрезвычайно сменный определенный формат, который представляет всю внутреннюю структуру IIOMetadata объект в форме ДОМА. Последний формат упоминается как собственный формат плагина; его имя может быть определено, вызывая getNativeMetadataFormatName метод IIOMetadata объект, возвращенный читателем (усовершенствованные пользователи могут обратиться к методу того же самого имени ImageReaderSpi объект, используемый, чтобы инстанцировать читателя. Последний подход полезен для выбора плагина, основанного на его поддержке определенного формата). Имена всех поддерживаемых форматов документа могут быть определены так же, вызывая getMetadataFormatNames.

Содержание IIOMetadata к объекту можно получить доступ в форме дерева XML Node объекты, вызывая getAsTree метод. Этот метод берет a String параметр, который является именем одного из форматов документа, поддерживаемых плагином. Этим документом можно тогда управлять как стандартный XML дерево ДОМА.

Как пример, чтобы напечатать содержание XML дерево ДОМА, может использоваться следующий код:

public void displayMetadata(Node root) {
        displayMetadata(root, 0);
}

void indent(int level) {
        for (int i = 0; i < level; i++) {
                System.out.print("  ");
        }
} 

void displayMetadata(Node node, int level) {
        indent(level); // emit open tag
        System.out.print("<" + node.getNodeName());
        NamedNodeMap map = node.getAttributes();
        if (map != null) { // print attribute values
                int length = map.getLength();
                for (int i = 0; i < length; i++) {
                        Node attr = map.item(i);
                        System.out.print(" " + attr.getNodeName() +
                                         "=\"" + attr.getNodeValue() + "\"");
                }
        }

        Node child = node.getFirstChild();
        if (child != null) {
                System.out.println(">"); // close current tag
                while (child != null) { // emit child tags recursively
                        displayMetadata(child, level + 1);
                        child = child.getNextSibling();
                }
                indent(level); // emit close tag
                System.out.println("</" + node.getNodeName() + ">");
        } else {
                System.out.println("/>");
        }
}

Выполнение displayMetadata на метаданных от теста PNG изображение приводит к выводу:
<com.sun.imageio.png_1.0>
  <IHDR width="32" height="32" bitDepth="8" colorType="RGB"
compressionMethod="deflate" filterMethod="adaptive" interlaceMethod="none"/>
  <cHRM whitePointX="31270" whitePointY="32900" redX="64000" redY="33000"
greenX="30000" greenY="60000" blueX="15000" blueY="6000"/>
  <gAMA value="100000"/>
</com.sun.imageio.png_1.0>
Мы видим, что изображение содержит IHDR, cHRM, и gAMA блоки. Интерпретация значений атрибута требует понимания формата PNG; однако, это все еще возможно для приложения, которое не понимает внутренности PNG, чтобы вывести на экран значения и позволить им быть отредактированными в интерактивном режиме.

3.5.1 IIOMetadataFormat Интерфейс

IIOMetadataFormat объект используется, чтобы описать юридическую структуру формата документа метаданных. Это ограничивает типы узлов, которые могут появиться, типы узлов, которые могут быть дочерними элементами узла данного типа, имен и типов данных атрибутов, которые могут появиться в узле данного типа, и магнитофонной ленте Object значение, которое может быть сохранено в узле данного типа. В условиях XML, информация, предоставленная IIOMetadataFormat интерфейс является где-нибудь промежуточным DTD (Определение типа документа), которое дает информацию о типах узла, дочерних элементах, и атрибутах, и XML-схеме, которая обеспечивает подробную информацию о типах данных.

Для простоты только подмножество юридических структур DTD может быть описано IIOMetadataFormat. Например, дочерние элементы узла могут быть определены в IIOMetadataFormat как последовательность, в которой каждый дочерний элемент должен появиться однажды (a, b, c), последовательность, в которой каждый дочерний элемент является дополнительным (a?, b?, c?), выбор единственного дочернего элемента (a | b | c), или повторение единственного типа узла (a)*, тогда как DTD позволяет еще много комбинаций.

Узел, возможно, не содержит текстовых данных, но может содержать ссылку на произвольное Object. IIOMetadataFormat указывает на тип класса и дополнительно юридические перечисляемые значения или диапазон значений для Object. Массивы поддерживаются также.

DTD не позволяет типов данных атрибута кроме символьных строк; XML-схема позволяет чрезвычайно сложным типам данных быть созданными от более простых. IIOMetadataFormat занимает второй план; это позволяет атрибутам быть ограниченными принадлежать одному из предопределенного набора простых типов данных, включая целые числа, десятичные числа с плавающей точкой, и даты. Списки этих типов данных также позволяются.

Начиная с IIOMetadataFormat мог бы использоваться, чтобы автоматически создать пользовательский интерфейс для отображения и редактирования метаданных, ограничил набор юридических структур, значительно упрощает отображение между проектами пользовательского интерфейса и форматами.



СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT

Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами