Spec-Zone .ru
спецификации, руководства, описания, API
|
Метаданные JPEG
Сокращенные Потоки
Источники Таблиц
Преобразования Colorspace и Стандартные Маркеры
Изображения миниатюры
Прогрессивное Кодирование
Собственная Древовидная структура Формата Метаданных и Редактирование
DTD Метаданных изображения
Потоковый DTD Метаданных
dispose()
на читателе JPEG и объекты писателя, когда они больше не необходимы, поскольку они используют существенные собственные ресурсы, которые не соответственно восстанавливаются сборкой "мусора". И вызов читателя и писателя dispose()
в их финализаторах, но тех финализаторах, возможно, не вызывается прежде, чем собственный код исчерпал собственную память.
Писатель JPEG не поддерживает пиксели замены.
SOI
маркер и EOI
маркер для того изображения. Объект метаданных изображения, который передают в запись, определяет содержание потока между SOI
маркер и EOI
маркер для того изображения согласно средствам управления в любом ImageWriteParam
. Потоковые метаданные используются только для найденных изображений только для таблиц (или быть помещенными) в начале потока, содержащего сокращенные изображения. Изображения только для таблиц не обрабатываются как изображения и не используют изображение, индексируют. Потоковый объект метаданных, возвращенный из чтения, описывает содержание сегментов маркера между SOI
маркер и EOI
маркер для единственного изображения только для таблиц в начале потока, если Вы присутствуете. Если никакое изображение только для таблиц не присутствует впереди потока, getStreamMetadata
метод ImageReader
возвраты null
. Если потоковые метаданные будут предоставлены писателю, то единственное изображение только для таблиц, содержащее таблицы от потокового объекта метаданных, будет записано в начале потока. Если потоковый объект метаданных не будет содержать таблиц, то таблицы значения по умолчанию будут записаны. Поскольку единственная цель потоковых метаданных для того, чтобы определить изображения только для таблиц впереди сокращенных потоков, потоковый параметр метаданных полезен только на ImageWriter.prepareWriteSequence
метод. Это игнорируется на всех других методах.
ImageWriter.getDefaultStreamMetadata
метод возвращает объект, содержащий таблицы от ImageWriteParam
параметр, если это - a JPEGImageWriteParam
и содержит таблицы. Иначе, возвращенный объект будет содержать таблицы значения по умолчанию.
ImageWriter.getDefaultImageMetadata
метод возвращает объект метаданных, не содержащий ImageWriteParam
параметр содержит таблицы. Иначе возвращенный объект метаданных будет содержать значение по умолчанию визуально таблицы без потерь. Конечно, только a JPEGImageWriteParam
может содержать таблицы.
Если ignoreMetadata
устанавливается в true
то, когда ввод будет установлен на читателе, потоковые метаданные не будут доступны, но отобразят метаданные, будет.
IllegalArgumentException
бросается.Отметьте, что, как только изображение только для таблиц было считано, это - содержание, доступно как потоковые метаданные от читателя, пока или другое изображение только для таблиц не читается из другого потока или читателя, сбрасывается. Изменение ввода не сбрасывает потоковые метаданные. Это полезно для чтения таблиц из одного файла, затем изменяя ввод, чтобы считать сокращенный поток, содержащий последовательность изображений. Таблицы будут использоваться автоматически, и останутся доступными как "потоковые" метаданные.
Сокращенные потоки пишутся, используя методы последовательности ImageWriter
. Потоковые метаданные используются, чтобы записать изображение только для таблиц в начале потока, и таблицы устанавливаются для использования, используя ImageWriter.prepareWriteSequence
. Если никакие потоковые метаданные не предоставляются ImageWriter.prepareWriteSequence
, тогда никакое изображение только для таблиц не пишется. Если потоковые метаданные, не содержащие таблиц, предоставляются ImageWriter.prepareWriteSequence
, тогда изображение только для таблиц, содержащее значение по умолчанию визуально таблицы без потерь, пишется.
Изображения пишутся с таблицами, если таблицы присутствуют в своих объектах метаданных или без них, если никакие таблицы не присутствуют в своих объектах метаданных. Если никакой объект метаданных не присутствует тогда, таблицы пишутся. Таблицы, используемые для сжатия, берутся из одного из следующих источников, с которыми консультируются в порядке:
ImageWriteParam
и режим сжатия устанавливается в EXPLICIT
, созданное использование таблиц значения по умолчанию качественной установки используется. Они пишутся, только если метаданные содержат таблицы или если нет никаких метаданных, но они заменяют таблицы в метаданных.ImageWriteParam
и режим сжатия устанавливается в DEFAULT
, примите значение по умолчанию визуально lossles, таблицы используются. Они пишутся, только если метаданные содержат таблицы или если нет никаких метаданных, но они заменяют таблицы в метаданных.ImageWriteParam
должен быть MODE_COPY_FROM_METADATA
, когда следующее используется: JPEGImageWriteParam
, если существующийJPEGImageWriteParam
s только как средство определения таблиц, когда никакой другой источник не доступен, и это может произойти только при записи в сокращенный поток без таблиц, используя известные нестандартные таблицы для сжатия. Читая, таблицы в a JPEGImageReadParam
консультируются, только если на столы не накрыло никакое предыдущее чтение. На столы накрывают от a JPEGImageReadParam
переопределяются любыми таблицами, существующими в считанном потоке.
Отметьте, что, если никакой объект метаданных изображения не определяется для определенного изображения, объект значения по умолчанию используется, который включает таблицы значения по умолчанию.
Raster
s читаются, никакое colorspace преобразование не выполняется, и любой целевой тип игнорируется. Предупреждение отправляется любым слушателям, если целевой тип определяется в этом случае. Когда Raster
s пишутся, любой целевой тип используется, чтобы интерпретировать полосы. Это могло бы привести к JFIF или заголовку Adobe, записанному, или различные компонентные идентификаторы, записанные фрейму, и отсканировать заголовки. Если значения, существующие в объекте метаданных, не соответствуют целевой тип, целевой тип используется, и предупреждение отправляется любым слушателям. Дополнительная поддержка ColorSpace: Обрабатывая PhotoYCC (YCC), PhotoYCCA (YCCA), цветовые пространства RGBA и YCbCrA стандартным плагином, как описано ниже, зависят от возможностей библиотек, пользовавшихся, чтобы интерпретировать данные JPEG. Таким образом все последовательные поведения являются дополнительными. Если поддержка не будет доступна, декодируя, то цветовое пространство будет обработано как нераспознанное, и соответствующее пространство цвета по умолчанию для конкретного количества компонентных каналов может быть использовано. При записи Исключение может быть выдано, если никакое подходящее преобразование не может быть применено перед кодированием. Но где поддержка этих цветовых пространств доступна, поведение должно быть как задокументировано.
Читая, содержание потока интерпретируется обычными соглашениями JPEG, следующим образом:
APP0
сегмент маркера присутствует, colorspace, как известно, является или шкалой полутонов или YCbCr. Если APP2
сегмент маркера, содержащий встроенный профиль ICC, также присутствует, тогда YCbCr преобразовывается в RGB согласно формулам, данным в спецификации JFIF, и профиль ICC, как предполагается, обращается к получающемуся пространству RGB.
APP14
сегмент маркера присутствует, colorspace определяется, консультируясь transform
флаг. transform
флаг принимает одно из трех значений:
RGB
RGBA
YCC (как 'Y', 'C', 'c'), предполагаемый быть PhotoYCC
YCCA (как 'Y', 'C', 'c',), предполагаемый быть PhotoYCCA
Иначе, подвыбранными изображениями с 3 каналами, как предполагается, является YCbCr! неподвыбранные изображения с 3 каналами, как предполагается, являются RGB, подвыбранные изображения с 4 каналами, как предполагается, являются YCCK, и! неподвыбранные изображения с 4 каналами, как предполагается, являются CMYK.
BufferedImage
. Такое изображение может быть только для чтения как a Raster
. Если изображение является поддающимся толкованию, но нет никакого Java ColorSpace
доступное соответствие закодированному colorspace (ImageReader.getRawImageType
возвратится null
. ColorSpace
или пользовательский RGB ColorSpace
основанный на объектах на встроенном профиле ICC используется, чтобы создать вывод ColorModel
. PhotoYCC и изображения PhotoYCCA не преобразовываются. CMYK и изображения YCCK в настоящий момент не поддерживаются.BufferedImage
(Raster
s. Если изображение colorspace неподдерживается или неподдающееся толкованию, то ImageReader.getImageTypes
возвратит пустое Iterator
. Если подмножество необработанных полос требуется, a Raster
должен быть получен сначала и полосы, полученные из этого. Для того, чтобы записать, цветное преобразование, чтобы применяться определяется следующим образом:
Если подмножество исходных полос должно быть записано, никакое цветное преобразование не выполняется. Любое место назначения, если установлено, должно соответствовать число полос, которые будут записаны, и служат интерпретацией выбранных полос, а не запросом преобразования. Это поведение идентично этому для Raster
s. Если все полосы должны быть записаны и изображение (в противоположность a Raster
) пишется, любой целевой тип игнорируется, и предупреждение отправляется любым слушателям.
Если целевой тип используется и аспект объекта метаданных, если есть один, не является совместимым с тем типом, целевой тип используется, записанные метаданные изменяются от этого, если, и предупреждение отправляется слушателям. Это включает app0JFIF
и app14Adobe
узлы. Компонентные идентификаторы в sof
и sos
узлы не изменяются, однако, как если a app0JFIF
узел присутствует, любые значения могут использоваться.
Когда полное изображение будет записано, место назначения colorspace будет выбрано основанное на содержании изображения и настройках метаданных согласно следующему алгоритму:
Если никакой объект метаданных не определяется, то следующие значения по умолчанию применяются:
APP0
сегмент маркера. Полутоновые изображения с альфой пишутся без специального маркера. Как требуется JFIF, компонентные идентификаторы во фрейме и заголовке сканирования устанавливаются в 1. APP0
сегмент маркера. Если ColorSpace
из изображения основано на ICCProfile
(это - экземпляр ICC_ColorSpace
, но не один из встроенного стандарта ColorSpaces
), тогда тот профиль встраивается в APP2
сегмент маркера. Как требуется JFIF, компонентные идентификаторы во фрейме и заголовках сканирования устанавливаются в 1, 2, и 3. APP14
сегмент маркера и 'Y', 'C', и 'c' (и, если альфа-канал присутствует) как компонентные идентификаторы во фрейме и заголовках сканирования. Если объект метаданных определяется, то число каналов во фрейме и заголовках сканирования должно всегда соответствовать число полос, которые будут записаны, или исключение выдается. app0JFIF
и app14Adobe
узлы могут появиться в том же самом объекте метаданных только если app14Adobe
узел указывает на YCbCr, и компонентные идентификаторы JFIF совместимый (0-2). Различные типы изображения обрабатываются следующими способами:
(Все многоканальные изображения подвыбираются согласно факторам выборки в узле заголовка фрейма объекта метаданных, независимо от цветового пространства.)
app0JFIF
узел присутствует в объекте метаданных, JFIF APP0
сегмент маркера пишется. app14Adobe
узел присутствует в объекте метаданных, он проверяется на законность (transform
должен быть UNKNOWN
) и записанный. app0JFIF
узел присутствует в объекте метаданных, он игнорируется, и предупреждение отправляется слушателям, поскольку JFIF не поддерживает изображения с 2 каналами. app14Adobe
узел присутствует в объекте метаданных, он проверяется на законность (transform
должен быть UNKNOWN
) и записанный. Если transform
не UNKNOWN
, предупреждение отправляется слушателям, и корректное преобразование пишется. app0JFIF
узел присутствует в объекте метаданных, изображение преобразовывается в YCbCr и пишется с JFIF APP0
сегмент маркера. Если ColorSpace
из изображения основано на нестандартном Профиле ICC, тогда тот профиль встраивается в APP2
сегмент маркера. Если ColorSpace
не основано на нестандартном Профиле ICC, но app2ICC
узел появляется в метаданных, затем APP2
сегмент маркера пишется с соответствующим стандартным профилем. Отметьте, что профиль должен определить цветовое пространство RGB, поскольку файл должен быть JFIF совместимый. app14Adobe
узел присутствует в объекте метаданных, изображение преобразовывается согласно цветной установке преобразования и пишется с Adobe APP14
сегмент маркера. Компонентные идентификаторы пишутся так же, как они появляются во фрейме и сканируют заголовки. Цветным преобразованием должен быть или YCbCr или UNKNOWN
. Если это UNKNOWN
, изображение не является преобразованным цветом. app0JFIF
узел присутствует в объекте метаданных, он игнорируется, и предупреждение отправляется слушателям, поскольку JFIF не поддерживает изображения с 4 каналами. app14Adobe
узел присутствует в объекте метаданных, изображение пишется с Adobe APP14
сегмент маркера. Никакое colorspace преобразование не выполняется. Компонентные идентификаторы пишутся так же, как они появляются во фрейме и сканируют заголовки. Цветное преобразование должно быть UNKNOWN
. Если это не, предупреждение отправляется слушателям. app14Adobe
узел присутствует, с компонентными идентификаторами в заголовке фрейма консультируются. Если они указывают на colorspace как описано выше, то изображение преобразовывается в это colorspace если возможный. Если компонентные идентификаторы не указывают на colorspace, то с факторами выборки консультируются. Если изображение должно быть подвыбрано, оно преобразовывается в YCbCrA. Если изображение не должно быть подвыбрано, то никакое преобразование не применяется. Никакие специальные сегменты маркера не пишутся. app0JFIF
узел присутствует в объекте метаданных, изображение преобразовывается в sRGB, и затем в YCbCr во время кодирования, и JFIF APP0
сегмент маркера пишется. app14Adobe
узел присутствует в объекте метаданных, никакое преобразование не применяется, и Adobe APP14
сегмент маркера пишется. Цветное преобразование должно быть YCC. Если это не, предупреждение отправляется слушателям. app0JFIF
узел присутствует в объекте метаданных, он игнорируется, и предупреждение отправляется слушателям, поскольку JFIF не поддерживает изображения с 4 каналами. app14Adobe
узел присутствует в объекте метаданных, никакое преобразование не применяется, и Adobe APP14
сегмент маркера пишется. Цветное преобразование должно быть UNKNOWN
. Если это не, предупреждение отправляется слушателям.
app0JFIF
и app0JFXX
узлы, существующие в метаданных, не содержат пиксельных данных миниатюры. Однако, виды записанных миниатюр зависят от содержания объекта метаданных, следующим образом. Любая миниатюра, которая должна быть записана как индексированный или изображение RGB и которая больше чем 255 255, будет отсечена, не масштабироваться, к 255 255. Миниатюры, записанные как изображения JPEG, могут быть любым размером. Предупреждение отправляется любым слушателям всякий раз, когда миниатюра отсекается. app0JFXX
узел присутствует в метаданных, или первом app0JFXX
узел, существующий в метаданных, содержит a JFIFthumbPalette
элемент, миниатюра палитры пишется в JFXX APP0
сегмент маркера. app0JFXX
узел, существующий в метаданных, содержит другую форму миниатюры (RGB или JPEG), изображение палитры расширяется до RGB, и обозначенная форма миниатюры пишется. app0JFXX
узел присутствует в метаданных, миниатюра пишется как часть JFIF APP0
сегмент маркера. app0JFXX
узел, существующий в метаданных, содержит a JFIFthumbRGB
элемент, миниатюра RGB пишется в JFXX APP0
сегмент маркера. app0JFXX
узел, существующий в метаданных, содержит a JFIFthumbJPEG
элемент, миниатюра JPEG пишется в JFXX APP0
сегмент маркера. app0JFXX
узел, существующий в метаданных, содержит a JFIFthumbPalette
элемент, миниатюра RGB пишется в JFXX APP0
сегмент маркера и предупреждение отправляются любым слушателям. app0JFXX
узел присутствует в метаданных, миниатюра расширяется до RGB и пишется как часть JFIF APP0
сегмент маркера. app0JFXX
узел, существующий в метаданных, содержит a JFIFthumbRGB
элемент, миниатюра расширяется до RGB и пишется в отдельном JFXX
Сегмент маркера RGB. app0JFXX
узел, существующий в метаданных, содержит a JFIFthumbJPEG
элемент, миниатюра JPEG пишется в JFXX APP0
сегмент маркера. app0JFXX
узел, существующий в метаданных, содержит a JFIFthumbPalette
элемент, миниатюра JPEG пишется в JFXX APP0
сегмент маркера и предупреждение отправляются любым слушателям. APP0
сегмент, и app0JFXX
узел, с которым консультируются для каждой миниатюры, app0JFXX
узел от метаданных, которые происходят в той же самой последовательности как миниатюра. app0JFXX
узел применяется к первой миниатюре, второму узлу к второй миниатюре, и так далее. Если есть меньше app0JFXX
узлы в метаданных чем миниатюры, тогда у тех миниатюр, как полагают, нет никакого соответствия app0JFXX
узел. Миниатюра RGB без соответствия app0JFXX
узел пишется в JFXX APP0
сегмент маркера. Полутоновая миниатюра без соответствия app0JFXX
узел пишется как изображение JPEG JFXX APP0
сегмент маркера. Отметьте, что, поскольку единственный механизм для того, чтобы сохранить миниатюры через JFIF или сегменты маркера расширения JFIF, только у шкалы полутонов или изображений RGB могут быть миниатюры. Если миниатюры присутствуют при записи какого-либо другого типа изображения, миниатюры игнорируются, и предупреждение отправляется любым слушателям предупреждения.
ImageWriteParam
переданный в к операции записи, или изображению будет записан последовательно, независимо от заголовков сканирования, включенных в объект метаданных. Если прогрессивное кодирование включается и устанавливается скопировать с метаданных, то последовательность заголовков сканирования от метаданных используется, чтобы записать изображение. Если прогрессивное кодирование включается и устанавливается использовать значение по умолчанию, то сканирования в метаданных игнорируются, и набор значения по умолчанию сканирований используется. Прогрессивное кодирование всегда вызывает, оптимизировал таблицы Хафмана, которые будут использоваться. Любые таблицы Хаффмана, существующие в метаданных, будут проигнорированы, и предупреждение будет отправлено любым слушателям предупреждения. Если оптимизацию Таблицы Хаффмана требуют на ImageWriteParam
, все таблицы Хафмана в метаданных или в ImageWriteParam
непосредственно игнорируются, и предупреждение будет отправлено любым слушателям предупреждения, если какие-либо такие таблицы будут присутствовать.
IIOMetadata
объект. Они не включают соответствие узлов SOI
, EOI
, или RST
маркеры, поскольку эти разделители парсинга не переносят значимых метаданных. Первый узел всегда a JPEGvariety
узел. В javax_imageio_jpeg_image_1.0
версия формата метаданных JPEG, у этого узла может быть один дочерний элемент, app0JFIF
узел, указывая, что поток JPEG содержит сегмент маркера JFIF и связанные данные, или никакие дочерние элементы, указывая, что поток не содержит маркера JFIF. В будущих версиях формата метаданных JPEG могут поддерживаться другие варианты метаданных JPEG (например. Exif), определяя другие типы узлов, которые могут появиться как дочерний элемент JPEGvariety
узел.
(Отметьте что приложение, желающее интерпретировать метаданные Exif, поданные древовидная структура метаданных javax_imageio_jpeg_image_1.0
формат должен проверить на unknown
сегмент маркера с тегом, указывающим APP1
маркер и содержащий данные, идентифицирующие это как сегмент маркера Exif. Затем это может использовать специализированный код, чтобы интерпретировать данные в сегменте маркера. Если такое приложение должно было встретиться с деревом метаданных, отформатированным согласно будущей версии формата метаданных JPEG, сегмент маркера Exif не мог бы быть unknown
в том формате - это могло бы быть структурировано как дочерний узел JPEGvariety
узел. Таким образом для приложения важно определить который версия использовать, передавая строку, идентифицирующую версию для метода/конструктора, используемого, чтобы получить IIOMetadata
объект.)
На чтении, JFXX
и app2ICC
узлы происходят как дочерние элементы app0JFIF
узел. Это - истина независимо от где JFXX APP0
и APP2
сегменты маркера фактически происходят в потоке. Упорядочивание узлов в пределах markerSequence
узел соответствует упорядочиванию сегментов маркера, найденных в потоке JPEG.
На записи, любом JFXX
и app2ICC
узлы должны произойти как дочерние элементы app0JFIF
узел, непосредственно дочерний элемент a JPEGvariety
узел, который должен всегда быть первым узлом. (Если поток не должен быть JFIF совместимый, нет app0JFIF
узел должен быть обеспечен, и JPEGvariety
у узла не должно быть никаких дочерних элементов.) Любой JFIF APP0
, JFXX APP0
, и APP2
сегменты маркера пишутся сначала, сопровождаются всем Adobe APP14
, APPn
, COM
и неизвестные сегменты в порядке, в котором их соответствующие узлы появляются в markerSequence
узел, сопровождаемый DQT
(и DHT
для непрогрессивных записей) сегменты маркера, сопровождаемые SOF
и SOS
сегменты маркера. Для прогрессивных записей, используя метаданные, чтобы управлять прогрессией, SOS
сегменты используются в порядке, в котором их соответствующие узлы происходят в markerSequence
узел.
reset
, mergeTree
и setFromTree
у операций есть следующая семантика для объекта метаданных плагина JPEG:
reset
- Звонок reset
восстановит объект метаданных к тому же самому состоянию, которое он сразу имел после создания, появлялось ли это от чтения потока или получая объект значения по умолчанию из ImageWriter
. Это - истина независимо от того, сколько времен объект метаданных был изменен начиная с создания.
mergeTree
- Собственный Формат
mergeTree
работа принимает допустимые деревья, соответствующие DTD ниже, и объединяет узлы, используя следующие правила упорядочивания. Во всех случаях только данные, существующие в новом узле, изменяются в соответствующем существующем узле, если любой. Это означает, что узлы не могут быть удалены, используя mergeTree
. Чтобы удалить узлы, использовать setFromTree
. Дерево должно состоять из IIOMetadataNode
s.
app0JFIF
app0JFIF
узел уже существует, содержание нового изменяет существующий. dqt
dqt
узлы в последовательности, тогда каждая таблица в узле заменяет первую таблицу в любом dqt
узел, с тем же самым табличным идентификатором. dqt
узлы содержат таблицу с тем же самым идентификатором, тогда таблица добавляется к последнему существующему dqt
узел. dqt
узлы, затем новый создается и добавляется следующим образом: dht
узлы, новое dqt
узел вставляется перед первым. dht
узлы, новое dqt
узел вставляется перед sof
узел, если есть тот. sof
узел, новое dqt
узел вставляется перед первым sos
узел, если есть тот. sos
узел, новое dqt
узел добавляется до конца последовательности. dht
dht
узлы в последовательности, тогда каждая таблица в узле заменяет первую таблицу в любом dht
узел, с той же самой таблицей class и табличный идентификатор. dht
узлы содержат таблицу с тем же самым class и идентификатором, тогда таблица добавляется к последнему существующему dht
узел. dht
узлы, затем новый создается и добавляется следующим образом: dqt
узлы, новое dht
узел сразу вставляется после последнего dqt
узел. dqt
узлы, новое dht
узел вставляется перед sof
узел, если есть тот. sof
узел, новое dht
узел вставляется перед первым sos
узел, если есть тот. sos
узел, новое dht
узел добавляется до конца последовательности. dri
dri
узел, значение интервала перезапуска обновляется. dri
узел, затем новый создается и добавляется следующим образом: sof
узел, новое dri
узел вставляется перед этим. sof
узел, новое dri
узел вставляется перед первым sos
узел, если есть тот. sos
узел, новое dri
узел добавляется до конца последовательности. com
com
узел создается и вставляется следующим образом: com
узлы, новый вставляется после последнего. com
узлы, новое com
узел вставляется после app14Adobe
узел, если есть тот. app14Adobe
узел, новое com
узел вставляется в начале последовательности. app14Adobe
app14Adobe
узел, тогда его атрибуты обновляются от узла. app14Adobe
узел, затем новый создается и добавляется следующим образом: app14Adobe
узел вставляется после последнего unknown
узел, если есть кто-либо. unknown
узлы, новое app14Adobe
узел вставляется в начале последовательности. unknown
unknown
узел создается и добавляется к последовательности следующим образом: unknown
узлы маркера, новый вставляется после последнего. unknown
узлы, новое unknown
узел вставляется перед app14Adobe
узел, если есть тот. app14Adobe
узел, новое unknown
узел вставляется в начале последовательности. sof
sof
узел в последовательности, тогда ее значения обновляются от узла. sof
узел, затем новый создается и добавляется следующим образом: sos
узлы, новое sof
узел вставляется перед первым. sos
узел, новое sof
узел добавляется до конца последовательности. sos
sos
узел, тогда значения обновляются от узла. sos
узлы, затем IIOInvalidTreeException
бросается, как sos
узлы не могут быть объединены в ряд прогрессивных сканирований. sos
узлы, новый создается и добавляется до конца последовательности. mergeTree
- Стандартный Формат
mergeTree
работа, когда дано дерево в стандартном формате, изменит собственное дерево следующими способами:
Chroma
- ColorSpaceType
подузел a Chroma
узел может изменить цель colorspace сжатого изображения. Выбор нового colorspace может вызвать много изменений, в соответствии с алгоритмами, описанными выше: app0JFIF
и app14Adobe
узлы могут быть добавлены или удалены, подвыборка может быть добавлена или удалена, компонентные идентификаторы могут быть изменены, и sof
и sos
узлы будут обновлены соответственно. В случае необходимости дополнительное квантование и таблицы Хаффмана добавляются. В случае таблиц квантования значение по умолчанию будет масштабироваться, чтобы соответствовать уровень качества любых существующих таблиц. Никакие таблицы не добавляются к метаданным, которые уже не содержат таблицы. Если существующие метаданные определяют прогрессивное кодирование, то число каналов не должно измениться. Любой Transparency
узел также принимается во внимание как явное значение none
для Alpha
подузел может вызвать удаление альфа-канала, и чего-либо кроме none
может вызвать добавление альфа-канала. Dimension
- A PixelAspectRatio
спецификация может вызвать содержание app0JFIF
узел, чтобы измениться, если есть одно существующее, или добавление app0JFIF
узел, содержащий соответствующие значения, если может быть тот. Соответствующая пара целых чисел вычисляется от отношения с плавающей точкой для включения в узел. Text
- Каждый несжатый текстовый элемент преобразовывается в a com
узел и вставленный согласно правилам выше для того, чтобы объединиться com
узлы. setFromTree
- Собственный Формат
setFromTree
работа, когда дано дерево в собственном формате, описанном ниже, просто заменит существующее дерево полностью новым. Дерево должно состоять из IIOMetadataNode
s.
setFromTree
- Стандартный Формат
setFromTree
работа, когда дано дерево в стандартном формате, выполняет a reset
сопровождаемый слиянием нового дерева.
<!DOCTYPE "javax_imageio_jpeg_image_1.0" [ <!ELEMENT "javax_imageio_jpeg_image_1.0" (JPEGvariety, markerSequence)> <!ELEMENT "JPEGvariety" (app0JFIF)> <!-- A node grouping all marker segments specific to the variety of stream being read/written (e.g. JFIF) - may be empty --> <!ELEMENT "app0JFIF" (JFXX?, app2ICC?)> <!ATTLIST "app0JFIF" "majorVersion" #CDATA "1"> <!-- The major JFIF version number --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "app0JFIF" "minorVersion" #CDATA "2"> <!-- The minor JFIF version number --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "app0JFIF" "resUnits" ("0" | "1" | "2") "0"> <!-- The resolution units for Xdensisty and Ydensity (0 = no units, just aspect ratio; 1 = dots/inch; 2 = dots/cm) --> <!ATTLIST "app0JFIF" "Xdensity" #CDATA "1"> <!-- The horizontal density or aspect ratio numerator --> <!-- Data type: Integer --> <!-- Min value: 1 (inclusive) --> <!-- Max value: 65535 (inclusive) --> <!ATTLIST "app0JFIF" "Ydensity" #CDATA "1"> <!-- The vertical density or aspect ratio denominator --> <!-- Data type: Integer --> <!-- Min value: 1 (inclusive) --> <!-- Max value: 65535 (inclusive) --> <!ATTLIST "app0JFIF" "thumbWidth" #CDATA "0"> <!-- The width of the thumbnail, or 0 if there isn't one --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "app0JFIF" "thumbHeight" #CDATA "0"> <!-- The height of the thumbnail, or 0 if there isn't one --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ELEMENT "JFXX" (app0JFXX)*> <!-- Min children: 1 --> <!ELEMENT "app0JFXX" (JFIFthumbJPEG | JFIFthumbPalette | JFIFthumbRGB)> <!-- A JFIF extension marker segment --> <!ATTLIST "app0JFXX" "extensionCode" ("16" | "17" | "19") #IMPLIED> <!-- The JFXX extension code identifying thumbnail type: (16 = JPEG, 17 = indexed, 19 = RGB --> <!ELEMENT "JFIFthumbJPEG" (markerSequence?)> <!-- A JFIF thumbnail in JPEG format (no JFIF segments permitted) --> <!ELEMENT "JFIFthumbPalette" EMPTY> <!-- A JFIF thumbnail as an RGB indexed image --> <!ATTLIST "JFIFthumbPalette" "thumbWidth" #CDATA #IMPLIED> <!-- The width of the thumbnail --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "JFIFthumbPalette" "thumbHeight" #CDATA #IMPLIED> <!-- The height of the thumbnail --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ELEMENT "JFIFthumbRGB" EMPTY> <!-- A JFIF thumbnail as an RGB image --> <!ATTLIST "JFIFthumbRGB" "thumbWidth" #CDATA #IMPLIED> <!-- The width of the thumbnail --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "JFIFthumbRGB" "thumbHeight" #CDATA #IMPLIED> <!-- The height of the thumbnail --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ELEMENT "app2ICC" EMPTY> <!-- An ICC profile APP2 marker segment --> <!-- Optional User object: java.awt.color.ICC_Profile --> <!ELEMENT "markerSequence" (dqt | dht | dri | com | unknown | app14Adobe | sof | sos)*> <!-- A node grouping all non-jfif marker segments --> <!ELEMENT "dqt" (dqtable)*> <!-- A Define Quantization Table(s) marker segment --> <!-- Min children: 1 --> <!-- Max children: 4 --> <!ELEMENT "dqtable" EMPTY> <!-- A single quantization table --> <!-- User object: javax.imageio.plugins.jpeg.JPEGQTable --> <!ATTLIST "dqtable" "elementPrecision" #CDATA "0"> <!-- The number of bits in each table element (0 = 8, 1 = 16) --> <!-- Data type: Integer --> <!ATTLIST "dqtable" "qtableId" ("0" | "1" | "2" | "3") #REQUIRED> <!ELEMENT "dht" (dhtable)*> <!-- A Define Huffman Table(s) marker segment --> <!-- Min children: 1 --> <!-- Max children: 4 --> <!ELEMENT "dhtable" EMPTY> <!-- A single Huffman table --> <!-- User object: javax.imageio.plugins.jpeg.JPEGHuffmanTable --> <!ATTLIST "dhtable" "class" ("0" | "1") #REQUIRED> <!-- Indicates whether this is a DC (0) or an AC (1) table --> <!ATTLIST "dhtable" "htableId" ("0" | "1" | "2" | "3") #REQUIRED> <!-- The table id --> <!ELEMENT "dri" EMPTY> <!-- A Define Restart Interval marker segment --> <!ATTLIST "dri" "interval" #CDATA #REQUIRED> <!-- The restart interval in MCUs --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 65535 (inclusive) --> <!ELEMENT "com" EMPTY> <!-- A Comment marker segment. The user object contains the actual bytes. --> <!-- User object: array of [B --> <!-- Min length: 1 --> <!-- Max length: 65533 --> <!ATTLIST "com" "comment" #CDATA #IMPLIED> <!-- The comment as a string (used only if user object is null) --> <!-- Data type: String --> <!ELEMENT "unknown" EMPTY> <!-- An unrecognized marker segment. The user object contains the data not including length. --> <!-- User object: array of [B --> <!-- Min length: 1 --> <!-- Max length: 65533 --> <!ATTLIST "unknown" "MarkerTag" #CDATA #REQUIRED> <!-- The tag identifying this marker segment --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ELEMENT "app14Adobe" EMPTY> <!-- An Adobe APP14 marker segment --> <!ATTLIST "app14Adobe" "version" #CDATA "100"> <!-- The version of Adobe APP14 marker segment --> <!-- Data type: Integer --> <!-- Min value: 100 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "app14Adobe" "flags0" #CDATA "0"> <!-- The flags0 variable of an APP14 marker segment --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 65535 (inclusive) --> <!ATTLIST "app14Adobe" "flags1" #CDATA "0"> <!-- The flags1 variable of an APP14 marker segment --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 65535 (inclusive) --> <!ATTLIST "app14Adobe" "transform" ("0" | "1" | "2") #REQUIRED> <!-- The color transform applied to the image (0 = Unknown, 1 = YCbCr, 2 = YCCK) --> <!ELEMENT "sof" (componentSpec)*> <!-- A Start Of Frame marker segment --> <!-- Min children: 1 --> <!-- Max children: 4 --> <!ATTLIST "sof" "process" ("0" | "1" | "2") #IMPLIED> <!-- The JPEG process (0 = Baseline sequential, 1 = Extended sequential, 2 = Progressive) --> <!ATTLIST "sof" "samplePrecision" #CDATA "8"> <!-- The number of bits per sample --> <!-- Data type: Integer --> <!ATTLIST "sof" "numLines" #CDATA #IMPLIED> <!-- The number of lines in the image --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 65535 (inclusive) --> <!ATTLIST "sof" "samplesPerLine" #CDATA #IMPLIED> <!-- The number of samples per line --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 65535 (inclusive) --> <!ATTLIST "sof" "numFrameComponents" ("1" | "2" | "3" | "4") #IMPLIED> <!-- The number of components in the image --> <!ELEMENT "componentSpec" EMPTY> <!-- A component specification for a frame --> <!ATTLIST "componentSpec" "componentId" #CDATA #REQUIRED> <!-- The id for this component --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "componentSpec" "HsamplingFactor" #CDATA #REQUIRED> <!-- The horizontal sampling factor for this component --> <!-- Data type: Integer --> <!-- Min value: 1 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "componentSpec" "VsamplingFactor" #CDATA #REQUIRED> <!-- The vertical sampling factor for this component --> <!-- Data type: Integer --> <!-- Min value: 1 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "componentSpec" "QtableSelector" ("0" | "1" | "2" | "3") #REQUIRED> <!-- The quantization table to use for this component --> <!ELEMENT "sos" (scanComponentSpec)*> <!-- A Start Of Scan marker segment --> <!-- Min children: 1 --> <!-- Max children: 4 --> <!ATTLIST "sos" "numScanComponents" ("1" | "2" | "3" | "4") #REQUIRED> <!-- The number of components in the scan --> <!ATTLIST "sos" "startSpectralSelection" #CDATA "0"> <!-- The first spectral band included in this scan --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 63 (inclusive) --> <!ATTLIST "sos" "endSpectralSelection" #CDATA "63"> <!-- The last spectral band included in this scan --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 63 (inclusive) --> <!ATTLIST "sos" "approxHigh" #CDATA "0"> <!-- The highest bit position included in this scan --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 15 (inclusive) --> <!ATTLIST "sos" "approxLow" #CDATA "0"> <!-- The lowest bit position included in this scan --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 15 (inclusive) --> <!ELEMENT "scanComponentSpec" EMPTY> <!-- A component specification for a scan --> <!ATTLIST "scanComponentSpec" "componentSelector" #CDATA #REQUIRED> <!-- The id of this component --> <!-- Data type: Integer --> <!-- Min value: 0 (inclusive) --> <!-- Max value: 255 (inclusive) --> <!ATTLIST "scanComponentSpec" "dcHuffTable" ("0" | "1" | "2" | "3") #REQUIRED> <!-- The huffman table to use for encoding DC coefficients --> <!ATTLIST "scanComponentSpec" "acHuffTable" ("0" | "1" | "2" | "3") #REQUIRED> <!-- The huffman table to use for encoding AC coefficients --> ]>
<!DOCTYPE "javax_imageio_jpeg_stream_1.0" [ <!ELEMENT "javax_imageio_jpeg_stream_1.0" (dqt | dht | dri | com | unknown)*> <!-- All elements are as defined above for image metadata --> ]>