Spec-Zone .ru
спецификации, руководства, описания, API
|
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT |
The javax.imageio.metadata
пакет содержит классы и интерфейсы для того, чтобы получить доступ к метаданным. Метаданные могут содержать сложные, иерархические структуры. Объектная модель XML-документов Java (ДОМ) API используется, чтобы представить эти структуры, разрешая разработчикам усилить их знание этих интерфейсов.
API ввода-вывода Изображения дифференцируется между потоковыми метаданными, которые связываются со всеми изображениями, сохраненными в файле изображения, и метаданных изображения, которые связываются с единственным изображением. Для форматы изображения, которые содержат единственное изображение, только отобразите метаданные, используется.
Метаданные могут быть получены, вызывая ImageReader.getStreamMetadata
и getImageMetadata(int imageIndex)
методы. Они возвращают объект, который реализует IIOMetadata
интерфейс. Фактический тип class возвращенного объекта составил ImageReader
, и обычно будет уникальный class, используемый только тем читателем. Этот объект должен быть разработан, чтобы сохранить так много метаданных, позволенных форматом насколько возможно, настолько без потерь насколько возможно. Однако, эта точность к спецификациям формата изображения прибывает в стоимость, поскольку доступ к метаданным становится специфичным для формата.
Чтобы предоставить доступ к метаданным без потребности в специфичном для формата коде программы, IIOMetadata
объекты представляют свою внутреннюю информацию в форме XML структура ДОМА, которая является по существу деревом узлов различных типов, которые могут содержать ряд атрибутов (String
значения, к которым получают доступ по имени), и который может сослаться на ряд дочерних узлов.
Единственный плагин может поддерживать многократные форматы документа, которые отличает имя формата. Как правило, по крайней мере два формата будут поддерживаться данным плагином. Первым является общий, сменный нейтральный вызванный формат com.sun.imageio_1.0
, который определяется в комментарии class для 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, чтобы вывести на экран значения и позволить им быть отредактированными в интерактивном режиме.IIOMetadataFormat
Интерфейс IIOMetadataFormat
объект используется, чтобы описать юридическую структуру формата документа метаданных. Это ограничивает типы узлов, которые могут появиться, типы узлов, которые могут быть дочерними элементами узла данного типа, имен и типов данных атрибутов, которые могут появиться в узле данного типа, и аудиоленте Object
значение, которое может быть сохранено в узле данного типа. В условиях XML, информация, предоставленная IIOMetadataFormat
интерфейс является где-нибудь промежуточным DTD (Определение типа документа), которое дает информацию о типах узла, дочерних элементах, и атрибутах, и XML-схеме, которая обеспечивает подробную информацию о типах данных.
Для простоты только подмножество юридических структур DTD может быть описано IIOMetadataFormat
. Например, дочерние элементы узла могут быть определены в IIOMetadataFormat
как последовательность, в которой каждый дочерний элемент должен появиться однажды (a, b, c)
, последовательность, в которой каждый дочерний элемент является дополнительным (a?, b?, c?)
, выбор единственного дочернего элемента (a | b | c)
, или повторение единственного типа узла (a)*
, тогда как DTD позволяет еще много комбинаций.
Узел, возможно, не содержит текстовых данных, но может содержать ссылку на произвольное Object
. IIOMetadataFormat
указывает на тип class и дополнительно юридические перечисляемые значения или диапазон значений для Object
. Массивы поддерживаются также.
DTD не позволяет типов данных атрибута кроме символьных строк; XML-схема позволяет чрезвычайно сложным типам данных быть созданными от более простых. IIOMetadataFormat
занимает второй план; это позволяет атрибутам быть ограниченными принадлежать одному из предопределенного набора простых типов данных, включая целые числа, десятичные числа с плавающей точкой, и даты. Списки этих типов данных также позволяются.
Начиная с IIOMetadataFormat
мог бы использоваться, чтобы автоматически создать пользовательский интерфейс для отображения и редактирования метаданных, ограничил набор юридических структур, значительно упрощает отображение между проектами пользовательского интерфейса и форматами.