src/java.desktop/share/classes/javax/imageio/metadata/doc-files/tiff_metadata.html
author erikj
Tue, 12 Sep 2017 19:03:39 +0200
changeset 47216 71c04702a3d5
parent 42749 jdk/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/tiff_metadata.html@91fb907a8732
child 47716 c9181704b389
permissions -rw-r--r--
8187443: Forest Consolidation: Move files to unified layout Reviewed-by: darcy, ihse
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     2
<html>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     3
<head>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     4
<!--
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     5
Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     6
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     7
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     8
This code is free software; you can redistribute it and/or modify it
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     9
under the terms of the GNU General Public License version 2 only, as
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    10
published by the Free Software Foundation.  Oracle designates this
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    11
particular file as subject to the "Classpath" exception as provided
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    12
by Oracle in the LICENSE file that accompanied this code.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    13
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    14
This code is distributed in the hope that it will be useful, but WITHOUT
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    15
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    16
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    17
version 2 for more details (a copy is included in the LICENSE file that
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    18
accompanied this code).
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    19
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    20
You should have received a copy of the GNU General Public License version
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    21
2 along with this work; if not, write to the Free Software Foundation,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    22
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    23
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    24
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    25
or visit www.oracle.com if you need additional information or have any
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    26
questions.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    27
-->
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    28
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    29
<title>TIFF Metadata Format Specification and Usage Notes</title>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    30
</head>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    31
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    32
<body bgcolor="white">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    33
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    34
<center><h1>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    35
TIFF Metadata Format Specification and Usage Notes
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    36
</h1></center>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    37
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    38
    <p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    39
<a href="#Reading">Reading Images</a><br/>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    40
<font size="-1">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    41
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    42
<li><a href="#ColorConversionRead">Color Conversion</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    43
<li><a href="#ColorSpacesRead">Color Spaces</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    44
<li><a href="#ICCProfilesRead">ICC Profiles</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    45
<li><a href="#MetadataIssuesRead">Metadata Issues</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    46
<font size="-2">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    47
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    48
<li><a href="#MapNativeStandard">Native to Standard Metadata Mapping</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    49
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    50
</font>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    51
</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    52
<li><a href="#ExifRead">Reading Exif Images</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    53
<font size="-2">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    54
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    55
<li><a href="#ExifReadTIFF">Reading Uncompressed Exif Images</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    56
<li><a href="#ExifReadJPEG">Reading Compressed Exif Images</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    57
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    58
</font>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    59
</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    60
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    61
</font>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    62
<a href="#Writing">Writing Images</a><br/>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    63
<font size="-1">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    64
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    65
<li><a href="#Compression">Compression</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    66
<li><a href="#ColorConversionWrite">Color Conversion</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    67
<li><a href="#ICCProfilesWrite">ICC Profiles</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    68
<li><a href="#MetadataIssuesWrite">Metadata Issues</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    69
<font size="-2">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    70
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    71
<li><a href="#MapStandardNative">Standard to Native Metadata Mapping</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    72
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    73
</font>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    74
<li><a href="#ExifWrite">Writing Exif Images</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    75
<font size="-2">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    76
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    77
<li><a href="#ExifWriteTIFF">Writing Uncompressed Exif Images</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    78
<li><a href="#ExifWriteJPEG">Writing Compressed Exif Images</a></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    79
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    80
</font>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    81
</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    82
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    83
</font>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    84
<a href="#StreamMetadata">Native Stream Metadata Format</a><br/>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    85
<a href="#ImageMetadata">Native Image Metadata Format</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    86
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    87
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    88
<h3><a name="Reading"/>Reading Images</h3>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    89
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    90
TIFF images are read by an <a href="../../ImageReader.html">ImageReader</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    91
which may be controlled by its public interface as well as via a supplied
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    92
<a href="../../plugins/tiff/TIFFImageReadParam.html">TIFFImageReadParam</a>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    93
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    94
<!-- <h4>Supported Image Types</h4> -->
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    95
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    96
<!-- Table? -->
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    97
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    98
<h4><a name="ColorConversionRead"/>Color Conversion</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    99
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   100
<p>If the source image data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   101
have photometric type CIE L*a*b* or YCbCr, and the destination color space
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   102
type is RGB, then the source image data will be automatically converted to
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   103
RGB using an internal color converter.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   104
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   105
<h4><a name="ColorSpacesRead"/>Color Spaces</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   106
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   107
The raw color space assigned by default, i.e., in the absence of a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   108
user-supplied <a href="../../ImageTypeSpecifier.html">ImageTypeSpecifier</a>,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   109
will be the first among the following which applies:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   110
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   111
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   112
<li>A color space created from the <a href="#ICCProfilesRead">ICC Profile</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   113
metadata field if it is present and compatible with the image data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   114
layout.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   115
<a name="nonICCProfile"><li>sRGB if the image is monochrome/bilevel
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   116
(a two-level color map is created internally).</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   117
<li>sRGB if the image is palette-color.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   118
<li>Linear RGB if the image has three samples per pixel, has photometric type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   119
CIE L*a*b*, or has photometric type YCbCr and is <i>not</i>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   120
JPEG-compressed.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   121
<li>A <a href="#DefaultCMYK">default CMYK color space</a> if the image has
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   122
photometric type CMYK and four samples per pixel.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   123
<li>Grayscale if the image has one or two samples per pixel and uniformly
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   124
1, 2, 4, 8, 16, or 32 bits per sample or is floating point.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   125
<li>sRGB if the image has three or four samples per pixel and uniformly
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   126
1, 2, 4, 8, 16, or 32 bits per sample or is floating point.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   127
<li>A fabricated, <a href="#GenericCS">generic color space</a> if the image
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   128
has more than four samples per pixel and the number of bits per sample for
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   129
all bands is the same and is a multiple of 8.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   130
<li>Grayscale if the image has one or two samples per pixel regardless of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   131
the number of bits per sample.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   132
<li>sRGB if the image has three or four samples per pixel regardless of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   133
the number of bits per sample.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   134
<li>A fabricated, <a href="#GenericCS">generic color space</a> if the image
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   135
has more than four samples per pixel regardless of the number of bits per
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   136
sample.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   137
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   138
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   139
<p><a name="DefaultCMYK"/>The normalized color coordinate transformations
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   140
used for the default CMYK color space are defined as follows:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   141
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   142
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   143
<li>CMYK to linear RGB
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   144
<pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   145
R = (1 - K)*(1 - C)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   146
G = (1 - K)*(1 - M)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   147
B = (1 - K)*(1 - Y)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   148
</pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   149
</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   150
<li>Linear RGB to CMYK
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   151
<pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   152
K = min{1 - R, 1 - G, 1 - B}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   153
if(K != 1) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   154
    C = (1 - R - K)/(1 - K)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   155
    M = (1 - G - K)/(1 - K)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   156
    Y = (1 - B - K)/(1 - K)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   157
} else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   158
    C = M = Y = 0
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   159
}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   160
</pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   161
</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   162
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   163
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   164
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   165
<p><a name="GenericCS"/>The generic color space used when no other color space
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   166
can be inferred is provided merely to enable the data to be loaded. It is not
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   167
intended to provide accurate conversions of any kind.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   168
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   169
<p>If the data are known to be in a color space not correctly handled by the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   170
foregoing, then an <code>ImageTypeSpecifier</code> should be
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   171
supplied to the reader and should be derived from a color space which is correct
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   172
for the data in question.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   173
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   174
<h4><a name="ICCProfilesRead"/>ICC Profiles</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   175
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   176
If an ICC profile is contained in the image metadata
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   177
(<a href="../../plugins/tiff/BaselineTIFFTagSet.html">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   178
BaselineTIFFTagSet</a>.TAG_ICC_PROFILE, tag number 34675),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   179
an attempt will be made to use it to create the color space
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   180
of the loaded image. It will be used if the data layout is of component type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   181
and the number of samples per pixel equals or is one greater than the number
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   182
of components described by the ICC profile. If the ICC profile is not used
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   183
then the color space will be inferred in one of the subsequent steps described
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   184
<a href="#nonICCProfile">above</a>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   185
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   186
<p>If for some reason the embedded ICC profile is not used automatically, then
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   187
it may be used manually by following this procedure:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   188
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   189
<ol>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   190
<li>Obtain the image metadata from
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   191
<code>ImageReader.getImageMetadata</code></li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   192
<li>Extract the ICC profile field and its value.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   193
<li>Create an <a href="../../../../java/awt/color/ICC_ColorSpace.html">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   194
ICC_ColorSpace</a> from an
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   195
<a href="../../../../java/awt/color/ICC_Profile.html">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   196
ICC_Profile</a> created from the ICC profile field data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   197
using <code>ICC_Profile.getInstance(byte[])</code>.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   198
<li>Create an <code>ImageTypeSpecifier</code> from the new color
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   199
space using one of its factory methods which accepts an
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   200
<code>ICC_ColorSpace</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   201
<li>Create a compatible <a href="../../ImageReadParam.html">ImageReadParam</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   202
and set the <code>ImageTypeSpecifier</code> using
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   203
<code>ImageReadParam.setDestinationType</code>.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   204
<li>Pass the parameter object to the appropriate <code>read</code> method.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   205
</ol>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   206
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   207
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   208
<p>If the inferred color space not based on the ICC Profile field is compatible
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   209
with the ICC profile-based color space, then a second
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   210
<code>ImageTypeSpecifier</code> derived from this inferred color
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   211
space will be included in the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   212
<a href="../../../../java/util/Iterator.html">Iterator</a> returned by
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   213
<code>ImageReader.getImageTypes</code>. If the iterator contains
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   214
more than one type, the first one will be based on the ICC profile and the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   215
second on the inferred color space.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   216
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   217
<h4><a name="MetadataIssuesRead"/>Metadata Issues</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   218
42749
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   219
By default all recognized fields in the TIFF image file directory (IFD) are
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   220
loaded into the native image metadata object. Which fields are loaded may be
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   221
controlled by setting which TIFF tags the reader is allowed to recognize,
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   222
whether to read fields with unrecognized tags, and whether to ignore all
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   223
metadata. The reader is informed to disregard all metadata as usual via the
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   224
<code>ignoreMetadata</code> parameter of
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   225
<code>ImageReader.setInput(Object,boolean,boolean)</code>. It is
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   226
informed of which <a href="../../plugins/tiff/TIFFTag.html">TIFFTag</a>s to
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   227
recognize or not to recognize via
42749
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   228
<code>TIFFImageReadParam.addAllowedTagSet(TIFFTagSet)</code> and
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   229
<code>TIFFImageReadParam.removeAllowedTagSet(TIFFTagSet)</code>.
42749
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   230
If <code>ignoreMetadata</code> is <code>true</code>, then only metadata
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   231
essential to reading the image will be loaded into the native image metadata
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   232
object. If <code>ignoreMetadata</code> is <code>false</code>, then the reader
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   233
will by default load into the native image metadata object only those fields
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   234
which are either essential to reading the image or have a <code>TIFFTag</code>
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   235
contained in the one of the allowed <code>TIFFTagSet</code>s. Reading of
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   236
fields with tags not in the allowed <code>TIFFTagSet</code>s may be forced
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   237
by passing in a <code>TIFFImageReadParam</code> on which
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   238
<code>TIFFImageReadParam.setReadUnknownTags(boolean)</code> has been
91fb907a8732 8154058: [TIFF] ignoreMetadata parameter of TIFFImageReader's setInput() method affects TIFFImageReadParam in non-obvious way
bpb
parents: 42718
diff changeset
   239
invoked with parameter <code>true</code>.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   240
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   241
<p>Use of a <a href="../../plugins/tiff/TIFFDirectory.html">TIFFDirectory</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   242
object may simplify gaining access to metadata values. An instance of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   243
<code>TIFFDirectory</code> may be created from the <code>IIOMetadata</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   244
object returned by the TIFF reader using the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   245
<code>TIFFDirectory.createFromMetadata</code> method.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   246
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   247
<h5><a name="MapNativeStandard"/>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   248
Mapping of TIFF Native Image Metadata to the Standard Metadata Format</h5>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   249
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   250
The derivation of standard metadata format
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   251
<a href="standard_metadata.html">javax_imageio_1.0</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   252
elements from <a href="#ImageMetadata">TIFF native image metadata</a> is given
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   253
in the following table.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   254
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   255
<p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   256
<table border="1">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   257
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   258
<th>Standard Metadata Element</th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   259
<th>Derivation from TIFF Fields</th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   260
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   261
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   262
<td>/Chroma/ColorSpaceType@name</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   263
<td>PhotometricInterpretation: WhiteIsZero, BlackIsZero, TransparencyMask =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   264
"GRAY"; RGB, PaletteColor => "RGB"; CMYK => "CMYK";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   265
YCbCr => "YCbCr";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   266
CIELab, ICCLab => "Lab".</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   267
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   268
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   269
<td>/Chroma/NumChannels@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   270
<td>SamplesPerPixel</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   271
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   272
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   273
<td>/Chroma/BlackIsZero@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   274
<td>"TRUE" <=> PhotometricInterpretation => WhiteIsZero</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   275
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   276
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   277
<td>/Chroma/Palette</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   278
<td>ColorMap</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   279
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   280
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   281
<td>/Compression/CompressionTypeName@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   282
<td>Compression: Uncompressed => "none"; CCITT 1D => "CCITT
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   283
RLE";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   284
Group 3 Fax => "CCITT T.4"; Group 4 Fax => "CCITT T.6";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   285
LZW => "LZW";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   286
JPEG => "Old JPEG"; New JPEG => "JPEG"; Zlib =>> "ZLib"; PackBits =>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   287
"PackBits";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   288
Deflate => "Deflate"; Exif JPEG => "JPEG".</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   289
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   290
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   291
<td>/Compression/Lossless@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   292
<td>Compression: JPEG or New JPEG => "FALSE"; otherwise "TRUE".</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   293
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   294
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   295
<td>/Data/PlanarConfiguration@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   296
<td>Chunky => "PixelInterleaved"; Planar => "PlaneInterleaved".</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   297
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   298
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   299
<td>/Data/SampleFormat@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   300
<td>PhotometricInterpretation PaletteColor => "Index";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   301
SampleFormat unsigned integer data => "UnsignedIntegral";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   302
SampleFormat two's complement signed integer data => "SignedIntegral";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   303
SampleFormat IEEE floating point data => "Real";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   304
otherwise element not emitted.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   305
</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   306
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   307
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   308
<td>/Data/BitsPerSample@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   309
<td>BitsPerSample as a space-separated list.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   310
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   311
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   312
<td>/Data/SampleMSB@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   313
<td>FillOrder: left-to-right => space-separated list of BitsPerSample-1;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   314
right-to-left => space-separated list of 0s.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   315
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   316
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   317
<td>/Dimension/PixelAspectRatio@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   318
<td>(1/XResolution)/(1/YResolution)</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   319
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   320
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   321
<td>/Dimension/ImageOrientation@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   322
<td>Orientation</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   323
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   324
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   325
<td>/Dimension/HorizontalPixelSize@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   326
<td>1/XResolution in millimeters if ResolutionUnit is not None.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   327
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   328
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   329
<td>/Dimension/VerticalPixelSize@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   330
<td>1/YResolution in millimeters if ResolutionUnit is not None.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   331
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   332
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   333
<td>/Dimension/HorizontalPosition@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   334
<td>XPosition in millimeters if ResolutionUnit is not None.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   335
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   336
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   337
<td>/Dimension/VerticalPosition@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   338
<td>YPosition in millimeters if ResolutionUnit is not None.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   339
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   340
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   341
<td>/Document/FormatVersion@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   342
<td>6.0</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   343
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   344
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   345
<td>/Document/SubimageInterpretation@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   346
<td>NewSubFileType: transparency => "TransparencyMask";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   347
reduced-resolution => "ReducedResolution";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   348
single page => "SinglePage".</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   349
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   350
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   351
<td>/Document/ImageCreationTime@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   352
<td>DateTime</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   353
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   354
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   355
<td>/Text/TextEntry</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   356
<td>DocumentName, ImageDescription, Make, Model, PageName, Software,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   357
Artist, HostComputer, InkNames, Copyright:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   358
/Text/TextEntry@keyword = field name,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   359
/Text/TextEntry@value = field value.<br>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   360
Example: TIFF Software field => /Text/TextEntry@keyword = "Software",
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   361
/Text/TextEntry@value = Name and version number of the software package(s)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   362
used to create the image.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   363
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   364
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   365
<td>/Transparency/Alpha@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   366
<td>ExtraSamples: associated alpha => "premultiplied";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   367
unassociated alpha => "nonpremultiplied".</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   368
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   369
</table>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   370
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   371
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   372
<h4><a name="ExifRead"/>Reading Exif Images</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   373
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   374
The TIFF reader may be used to read an uncompressed Exif image or the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   375
contents of the <tt>APP1</tt> marker segment of a compressed Exif image.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   376
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   377
<h5><a name="ExifReadTIFF"/>Reading Uncompressed Exif Images</h5>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   378
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   379
An uncompressed Exif image is a one- or two-page uncompressed TIFF image
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   380
with a specific ordering of its IFD and image data content. Each pixel
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   381
has three 8-bit samples with photometric interpretation RGB or YCbCr.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   382
The image stream must contain a single primary image and may contain a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   383
single thumbnail which if present must also be uncompressed. The usual
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   384
<code>ImageReader</code> methods may be used to read the image
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   385
data and metadata:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   386
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   387
<pre><code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   388
    ImageInputStream input;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   389
    ImageReader tiffReader;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   390
    ImageReadParam tiffReadParam;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   391
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   392
    tiffReader.setInput(input);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   393
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   394
    // Read primary image and IFD.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   395
    BufferedImage image = tiffReader.read(0, tiffReadParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   396
    IIOMetadata primaryIFD = tiffReader.getImageMetadata(0);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   397
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   398
    // Read thumbnail if present.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   399
    BufferedImage thumbnail = null;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   400
    if (tiffReader.getNumImages(true) > 1) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   401
        thumbnail = tiffReader.read(1, tiffReadParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   402
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   403
</code></pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   404
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   405
Note that the Exif thumbnail is treated as a separate page in the TIFF
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   406
stream and not as a thumbnail, i.e.,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   407
<code>tiffReader.hasThumbnails(0)</code> will return <code>false</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   408
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   409
<h5><a name="ExifReadJPEG"/>Reading Compressed Exif Images</h5>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   410
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   411
A compressed Exif image is a 3-band ISO/IEC 10918-1 baseline DCT JPEG stream
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   412
with an inserted <tt>APP1</tt> marker segment. The parameters of the marker
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   413
segment after the length are the 6-byte sequence
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   414
<code>{'E',&nbsp;'x',&nbsp;'i',&nbsp;'f',&nbsp;0x00,&nbsp;0x00}</code></code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   415
followed by a complete TIFF stream. The embedded TIFF stream contains a primary
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   416
IFD describing the JPEG image optionally followed by a thumbnail IFD and
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   417
compressed or uncompressed thumbnail image data. Note that the embedded TIFF
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   418
stream does not contain any image data associated with the primary IFD
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   419
nor any descriptive fields which duplicate information found in the JPEG
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   420
stream itself.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   421
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   422
<p>The parameter content of the <tt>APP1</tt> marker segment may be obtained
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   423
from the user object of the associated <code>Node</code> in a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   424
<tt>javax_imageio_jpeg_image_1.0</tt> native image metadata tree extracted
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   425
from the image metadata object returned by the JPEG reader. This APP1 Exif
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   426
node will be a child of the node named "markerSequence" and will
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   427
have name <tt>unknown</tt> and an attribute named <tt>MarkerTag</tt> with
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   428
integral value <code>0xE1</code> (<code>String</code> value
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   429
<code>"225"</code>). The user object of this node will be a byte array
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   430
which starts with the six bytes <code>{'E', 'x', 'i', 'f', '0', '0'}</code>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   431
The primary IFD and the thumbnail IFD and image may be
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   432
read from the user object by the usual <code>ImageReader</code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   433
methods:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   434
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   435
<pre><code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   436
    ImageReader jpegReader;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   437
    ImageReader tiffReader;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   438
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   439
    // Obtain the APP1 Exif marker data from the JPEG image metadata.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   440
    IIOMetadata jpegImageMetadata = jpegReader.getImageMetadata(0);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   441
    String nativeFormat = jpegImageMetadata.getNativeMetadataFormatName();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   442
    Node jpegImageMetadataTree = jpegImageMetadata.getAsTree(nativeFormat);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   443
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   444
    // getExifMarkerData() returns the byte array which is the user object
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   445
    // of the APP1 Exif marker node.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   446
    byte[] app1Params = getExifMarkerData(jpegImageMetadataTree);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   447
    if (app1Params == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   448
        throw new IIOException("APP1 Exif marker not found.");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   449
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   450
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   451
    // Set up input, skipping Exif ID 6-byte sequence.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   452
    MemoryCacheImageInputStream app1ExifInput
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   453
        = new MemoryCacheImageInputStream
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   454
            (new ByteArrayInputStream(app1Params, 6, app1Params.length - 6));
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   455
    tiffReader.setInput(app1ExifInput);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   456
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   457
    // Read primary IFD.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   458
    IIOMetadata primaryIFD = tiffReader.getImageMetadata(0);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   459
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   460
    // Read thumbnail if present.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   461
    BufferedImage thumbnail = null;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   462
    if (tiffReader.getNumImages(true) > 1) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   463
        thumbnail = tiffReader.read(1, tiffReadParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   464
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   465
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   466
    // Read the primary image.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   467
    BufferedImage image = jpegReader.read(0);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   468
</code></pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   469
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   470
Note that <code>tiffReader.getNumImages(true)</code> returns the number of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   471
IFDs in the embedded TIFF stream including those corresponding to empty
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   472
images. Calling <code>tiffReader.read(0,&nbsp;readParam)</code> will throw
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   473
an exception as the primary image in the embedded TIFF stream is always
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   474
empty; the primary image should be obtained using the JPEG reader itself.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   475
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   476
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   477
<h3><a name="Writing"/>Writing Images</h3>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   478
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   479
TIFF images are written by a <a href="../../ImageWriter.html">ImageWriter</a> which may be
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   480
controlled by its public interface as well as via a supplied
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   481
<a href="../../ImageWriteParam.html">ImageWriteParam</a>.  For an <code>ImageWriteParam</code> returned
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   482
by the <code>getDefaultWriteParam()</code> method of the TIFF <code>ImageWriter</code>,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   483
the <code>canWriteTiles()</code> and <code>canWriteCompressed()</code> methods
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   484
will return <code>true</code>; the <code>canOffsetTiles()</code> and
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   485
<code>canWriteProgressive()</code> methods will return <code>false</code>.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   486
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   487
The TIFF writer supports many optional capabilities including writing tiled
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   488
images, inserting images, writing or inserting empty images, and replacing image
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   489
data. Pixels may be replaced in either empty or non-empty images but if and
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   490
only if the data are not compressed.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   491
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   492
<p> If tiles are being written, then each of their dimensions will be
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   493
rounded to the nearest multiple of 16 per the TIFF specification. If
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   494
JPEG-in-TIFF compression is being used, and tiles are being written
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   495
each tile dimension will be rounded to the nearest multiple of 8 times
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   496
the JPEG minimum coded unit (MCU) in that dimension. If JPEG-in-TIFF
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   497
compression is being used and strips are being written, the number of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   498
rows per strip is rounded to a multiple of 8 times the maximum MCU over
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   499
both dimensions.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   500
 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   501
 <!-- <h4>Supported Image Types</h4> -->
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   502
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   503
<!-- Table? -->
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   504
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   505
<h4><a name="Compression"/>Compression</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   506
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   507
The compression type may be set via the <code>setCompressionType()</code> method of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   508
the <code>ImageWriteParam</code> after setting the compression mode to
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   509
<code>MODE_EXPLICIT</code>. The set of innately
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   510
supported compression types is listed in the following table:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   511
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   512
<table border=1>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   513
<caption><b>Supported Compression Types</b></caption>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   514
<tr><th>Compression Type</th> <th>Description</th> <th>Reference</th></tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   515
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   516
<td>CCITT RLE</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   517
<td>Modified Huffman compression</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   518
<td>TIFF 6.0 Specification, Section 10</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   519
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   520
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   521
<td>CCITT T.4</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   522
<td>CCITT T.4 bilevel encoding/Group 3 facsimile compression</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   523
<td>TIFF 6.0 Specification, Section 11</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   524
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   525
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   526
<td>CCITT T.6</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   527
<td>CCITT T.6 bilevel encoding/Group 4 facsimile compression</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   528
<td>TIFF 6.0 Specification, Section 11</td></tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   529
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   530
<td>LZW</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   531
<td>LZW compression</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   532
<td>TIFF 6.0 Specification, Section 13</td></tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   533
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   534
<td>JPEG</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   535
<td>"New" JPEG-in-TIFF compression</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   536
<td><a href="ftp://ftp.sgi.com/graphics/tiff/TTN2.draft.txt">TIFF
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   537
Technical Note #2</a></td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   538
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   539
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   540
<td>ZLib</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   541
<td>"Deflate/Inflate" compression (see note following this table)</td>
42718
96221842d2f1 8170142: Broken links in TIFF metadata format and usage notes
bpb
parents: 35302
diff changeset
   542
<td><a href="http://partners.adobe.com/public/developer/en/tiff/TIFFphotoshop.pdf">
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   543
Adobe Photoshop&#174; TIFF Technical Notes</a> (PDF)</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   544
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   545
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   546
<td>PackBits</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   547
<td>Byte-oriented, run length compression</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   548
<td>TIFF 6.0 Specification, Section 9</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   549
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   550
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   551
<td>Deflate</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   552
<td>"Zip-in-TIFF" compression (see note following this table)</td>
42718
96221842d2f1 8170142: Broken links in TIFF metadata format and usage notes
bpb
parents: 35302
diff changeset
   553
<td><a href="https://tools.ietf.org/html/rfc1950">
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   554
ZLIB Compressed Data Format Specification</a>,
42718
96221842d2f1 8170142: Broken links in TIFF metadata format and usage notes
bpb
parents: 35302
diff changeset
   555
<a href="https://tools.ietf.org/html/rfc1951">
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   556
DEFLATE Compressed Data Format Specification</a></td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   557
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   558
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   559
<td>Exif JPEG</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   560
<td>Exif-specific JPEG compression (see note following this table)</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   561
<td><a href="http://www.exif.org/Exif2-2.PDF">Exif 2.2 Specification</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   562
(PDF), section 4.5.5, "Basic Structure of Thumbnail Data"</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   563
</table>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   564
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   565
<p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   566
Old-style JPEG compression as described in section 22 of the TIFF 6.0
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   567
Specification is <i>not</i> supported.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   568
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   569
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   570
<p> The CCITT compression types are applicable to bilevel (1-bit)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   571
images only.  The JPEG compression type is applicable to byte
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   572
grayscale (1-band) and RGB (3-band) images only.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   573
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   574
<p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   575
ZLib and Deflate compression are identical except for the value of the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   576
TIFF Compression field: for ZLib the Compression field has value 8
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   577
whereas for Deflate it has value 32946 (0x80b2). In both cases each
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   578
image segment (strip or tile) is written as a single complete zlib data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   579
stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   580
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   581
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   582
<p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   583
"Exif JPEG" is a compression type used when writing the contents of an
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   584
APP1 Exif marker segment for inclusion in a JPEG native image metadata
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   585
tree. The contents appended to the output when this compression type is
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   586
used are a function of whether an empty or non-empty image is written.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   587
If the image is empty, then a TIFF IFD adhering to the specification of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   588
a compressed Exif primary IFD is appended. If the image is non-empty,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   589
then a complete IFD and image adhering to the specification of a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   590
compressed Exif thumbnail IFD and image are appended. Note that the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   591
data of the empty image may <i>not</i> later be appended using the pixel
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   592
replacement capability of the TIFF writer.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   593
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   594
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   595
<p> If ZLib/Deflate or JPEG compression is used, the compression quality
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   596
may be set. For ZLib/Deflate the supplied floating point quality value is
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   597
rescaled to the range <tt>[1,&nbsp;9]</tt> and truncated to an integer
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   598
to derive the Deflate compression level. For JPEG the floating point
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   599
quality value is passed directly to the JPEG writer plug-in which
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   600
interprets it in the usual way.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   601
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   602
<h4><a name="ColorConversionWrite"/>Color Conversion</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   603
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   604
<p>If the source image data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   605
color space type is RGB, and the destination photometric type is CIE L*a*b* or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   606
YCbCr, then the source image data will be automatically converted from
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   607
RGB using an internal color converter.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   608
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   609
<h4><a name="ICCProfilesWrite"/>ICC Profiles</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   610
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   611
An <tt>ICC Profile</tt> field will be written if either:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   612
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   613
<li>one is present in the native image metadata
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   614
<a href="../IIOMetadata.html">IIOMetadata</a> instance supplied to the writer,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   615
or</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   616
<li>the <a href="../../../../java/awt/color/ColorSpace.html">ColorSpace</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   617
of the destination <code>ImageTypeSpecifier</code> is an instance of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   618
<code>ICC_ColorSpace</code> which is not one of the standard
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   619
color spaces defined by the <tt>CS_*</tt> constants in the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   620
<code>ColorSpace</code> class. The destination type is set via
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   621
<code>ImageWriteParam.setDestinationType(ImageTypeSpecifier)</code> and defaults
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   622
to the <code>ImageTypeSpecifier</code> of the image being written.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   623
</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   624
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   625
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   626
<h4><a name="MetadataIssuesWrite"/>Metadata Issues</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   627
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   628
Some behavior of the writer is affected by or may affect the contents of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   629
the image metadata which may be supplied by the user.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   630
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   631
<p>For bilevel images, the <tt>FillOrder</tt>, and <tt>T4Options</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   632
fields affect the output data. The data will be filled right-to-left if
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   633
<tt>FillOrder</tt> is present with a value of 2
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   634
(<code>BaselineTIFFTagSet.FILL_ORDER_RIGHT_TO_LEFT</code>)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   635
and will be filled left-to-right otherwise. The value of <tt>T4Options</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   636
specifies whether the data should be 1D- or 2D-encoded and whether EOL
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   637
padding should be used.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   638
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   639
<p>For all images the value of the <tt>RowsPerStrip</tt> field is used
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   640
to the set the number of rows per strip if the image is not tiled. The
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   641
default number of rows per strip is either 8 or the number of rows which
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   642
would fill no more than 8 kilobytes, whichever is larger.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   643
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   644
<p>For all images the tile dimensions may be set using the <tt>TileWidth</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   645
and <tt>TileLength</tt> field values if the tiling mode is
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   646
<code>ImageWriteParam.MODE_COPY_FROM_METADATA</code>. If this mode
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   647
is set but the fields are not, their respective default values are the image
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   648
width and height.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   649
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   650
<p>When using JPEG-in-TIFF compression, a <tt>JPEGTables</tt> field will be
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   651
written to the IFD and abbreviated JPEG streams to each strip or tile if and
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   652
only if a <tt>JPEGTables</tt> field is contained in the metadata object
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   653
provided to the writer. If the contents of the <tt>JPEGTables</tt> field is
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   654
a valid tables-only JPEG stream, then it will be used; otherwise the contents
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   655
of the field will be replaced with default visually lossless tables. If no
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   656
such <tt>JPEGTables</tt> field is present in the metadata, then no
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   657
<tt>JPEGTables</tt> field will be written to the output and each strip or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   658
tile will be written as a separate, self-contained JPEG stream.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   659
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   660
<p>When using Deflate/ZLib or LZW compression, if the image has 8 bits per
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   661
sample, a horizontal differencing predictor will be used if the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   662
<tt>Predictor</tt> field is present with a value of 2
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   663
(<code>BaselineTIFFTagSet.PREDICTOR_HORIZONTAL_DIFFERENCING</code>).
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   664
If prediction is so requested but the image does not have
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   665
8 bits per sample the field will be reset to have the value 1
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   666
(<code>BaselineTIFFTagSet.PREDICTOR_NONE</code>).
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   667
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   668
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   669
<p>Some fields may be added or modified:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   670
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   671
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   672
<li><tt>PhotometricInterpretation</tt> if not present.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   673
<li><tt>PlanarConfiguration</tt> if this field is present with value
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   674
<tt>Planar</tt> is is reset to <tt>Chunky</tt>.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   675
<li><tt>Compression</tt> always.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   676
<li><tt>BitsPerSample</tt> if the image is not bilevel.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   677
<li><tt>SamplesPerPixel</tt> always.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   678
<li><tt>ExtraSamples</tt> if an alpha channel is present.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   679
<li><tt>SampleFormat</tt> if not present and the data are 16- or 32-bit
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   680
integers or floating point.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   681
<li><tt>ColorMap</tt> if the <tt>PhotometricInterpretation</tt> is
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   682
<tt>RGBPalette</tt>.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   683
<li><tt>ImageWidth</tt> and <tt>ImageLength</tt> always.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   684
<li><tt>TileWidth</tt>, <tt>TileLength</tt>, <tt>TileOffsets</tt>, and
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   685
<tt>TileByteCounts</tt> if a tiled image is being written.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   686
<li><tt>RowsPerStrip</tt>, <tt>StripOffsets</tt>, and <tt>StripByteCounts</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   687
if a tiled image is <i>not</i> being written.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   688
<li><tt>XResolution</tt>, <tt>YResolution</tt>, and <tt>ResolutionUnit</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   689
if none of these is present.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   690
<li><tt>YCbCrSubsampling</tt> and <tt>YCbCrPositioning</tt> if the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   691
photometric interpretation is YCbCr and the compression type is not JPEG
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   692
(only [1,&nbsp;1] subsampling and cosited positioning are supported for
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   693
non-JPEG YCbCr output).</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   694
<li><tt>YCbCrSubsampling</tt>, <tt>YCbCrPositioning</tt>, and
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   695
<tt>ReferenceBlackWhite</tt>: if the compression type is JPEG and the color
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   696
space is RGB these will be reset to [2,&nbsp;2] centered subsampling with no
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   697
headroom/footroom (0:255,128:255,128:255).</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   698
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   699
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   700
<p>Some fields may be removed:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   701
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   702
<ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   703
<li><tt>BitsPerSample</tt> if the image is bilevel.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   704
<li><tt>ExtraSamples</tt> if the image does not have an alpha channel.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   705
<li><tt>ColorMap</tt> if the photometric interpretation is not
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   706
<tt>RGBPalette</tt>.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   707
<li><tt>TileWidth</tt>, <tt>TileLength</tt>, <tt>TileOffsets</tt>, and
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   708
<tt>TileByteCounts</tt> if tiling <i>is not</i> being used.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   709
<li><tt>RowsPerStrip</tt>, <tt>StripOffsets</tt>, and <tt>StripByteCounts</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   710
if tiling <i>is</i> being used.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   711
<li><tt>YCbCrSubsampling</tt>, <tt>YCbCrPositioning</tt>, and
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   712
<tt>ReferenceBlackWhite</tt> if the compression type is JPEG and the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   713
color space is grayscale.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   714
<li><tt>JPEGProc</tt>, <tt>JPEGInterchangeFormat</tt>,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   715
<tt>JPEGInterchangeFormatLength</tt>, <tt>JPEGRestartInterval</tt>,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   716
<tt>JPEGLosslessPredictors</tt>, <tt>JPEGPointTransforms</tt>,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   717
<tt>JPEGQTables</tt>, <tt>JPEGDCTables</tt>, and
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   718
<tt>JPEGACTables</tt> if the compression type is JPEG.</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   719
</ul>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   720
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   721
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   722
<p>Other fields present in the supplied metadata are uninterpreted and will
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   723
be written as supplied.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   724
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   725
<p>If an Exif image is being written, the set of fields present and their
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   726
values will be modified such that the result is in accord with the Exif 2.2
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   727
specification.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   728
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   729
<p>Setting up the image metadata to write to a TIFF stream may be simplified
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   730
by using the <code>TIFFDirectory</code> class
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   731
which represents a TIFF IFD. A field in a TIFF IFD is represented by an
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   732
instance of <a href="../../plugins/tiff/TIFFField.html">TIFFField</a>. For each
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   733
field to be written a <code>TIFFField</code> may be added to the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   734
<code>TIFFDirectory</code> and the latter converted to an
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   735
<code>IIOMetadata</code> object by invoking
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   736
<code>TIFFDirectory.getAsMetadata</code>. The
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   737
<code>IIOMetadata</code> object so obtained may then be passed to the TIFF
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   738
writer.</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   739
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   740
<h5><a name="MapStandardNative"/>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   741
Mapping of the Standard Metadata Format to TIFF Native Image Metadata</h5>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   742
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   743
The derivation of <a href="#ImageMetadata">TIFF native image metadata</a>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   744
elements from the standard metadata format
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   745
<a href="standard_metadata.html">javax_imageio_1.0</a> is
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   746
given in the following table.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   747
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   748
<p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   749
<table border="1">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   750
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   751
<th>TIFF Field</th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   752
<th>Derivation from Standard Metadata Elements</th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   753
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   754
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   755
<td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   756
PhotometricInterpretation
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   757
</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   758
<td>/Chroma/ColorSpaceType@name: "GRAY" and /Chroma/BlackIsZero@value = "FALSE"
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   759
=> WhiteIsZero; "GRAY" and /Document/SubimageInterpretation@value =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   760
"TransparencyMask" => TransparencyMask; "RGB" and /Chroma/Palette present =>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   761
PaletteColor; "GRAY" => BlackIsZero; "RGB" => RGB; "YCbCr" => YCbCr;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   762
"CMYK" => CMYK; "Lab" => CIELab.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   763
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   764
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   765
<td>SamplesPerPixel</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   766
<td>/Chroma/NumChannels@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   767
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   768
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   769
<td>ColorMap</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   770
<td>/Chroma/Palette</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   771
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   772
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   773
<td>Compression</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   774
<td>/Compression/CompressionTypeName@value: "none" => Uncompressed;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   775
"CCITT RLE" => CCITT 1D; "CCITT T.4" => Group 3 Fax; "CCITT T.6" => Group 4
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   776
Fax; "LZW" => LZW; "Old JPEG" => JPEG; "JPEG" => New JPEG; "ZLib" => ZLib;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   777
"PackBits" => PackBits; "Deflate" => Deflate.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   778
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   779
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   780
<td>PlanarConfiguration</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   781
<td>/Data/PlanarConfiguration@value: "PixelInterleaved" => Chunky;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   782
"PlaneInterleaved" => Planar.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   783
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   784
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   785
<td>SampleFormat</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   786
<td>/Data/SampleFormat@value: "SignedIntegral" => two's complement signed
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   787
integer data; "UnsignedIntegral" => unsigned integer data; "Real" =>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   788
IEEE floating point data; "Index" => unsigned integer data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   789
</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   790
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   791
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   792
<td>BitsPerSample</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   793
<td>/Data/BitsPerSample@value: space-separated list parsed to char array.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   794
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   795
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   796
<td>FillOrder</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   797
<td>/Data/SampleMSB@value: if all values in space-separated list are 0s =>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   798
right-to-left; otherwise => left-to-right.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   799
</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   800
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   801
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   802
<td>XResolution</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   803
<td>(10 / /Dimension/HorizontalPixelSize@value) or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   804
(10 / (/Dimension/VerticalPixelSize@value *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   805
/Dimension/PixelAspectRatio@value))</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   806
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   807
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   808
<td>YResolution</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   809
<td>(10 / /Dimension/VerticalPixelSize@value) or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   810
(10 / (/Dimension/HorizontalPixelSize@value /
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   811
/Dimension/PixelAspectRatio@value))</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   812
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   813
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   814
<td>ResolutionUnit</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   815
<td>Centimeter if XResolution or YResolution set; otherwise None.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   816
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   817
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   818
<td>Orientation</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   819
<td>/Dimension/ImageOrientation@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   820
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   821
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   822
<td>XPosition</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   823
<td>/Dimension/HorizontalPosition@value / 10</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   824
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   825
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   826
<td>YPosition</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   827
<td>/Dimension/VerticalPosition@value / 10</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   828
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   829
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   830
<td>NewSubFileType</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   831
<td>/Document/SubimageInterpretation@value: "TransparencyMask" =>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   832
transparency mask; "ReducedResolution" => reduced-resolution;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   833
"SinglePage" => single page.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   834
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   835
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   836
<td>DateTime</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   837
<td>/Document/ImageCreationTime@value</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   838
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   839
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   840
<td>DocumentName, ImageDescription, Make, Model, PageName, Software,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   841
Artist, HostComputer, InkNames, Copyright</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   842
<td>/Text/TextEntry: if /Text/TextEntry@keyword is the name of any of the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   843
TIFF Fields, e.g., "Software", then the field is added with content
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   844
/Text/TextEntry@value and count 1.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   845
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   846
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   847
<td>ExtraSamples</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   848
<td>/Transparency/Alpha@value: "premultiplied" => associated alpha, count 1;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   849
"nonpremultiplied" => unassociated alpha, count 1.</td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   850
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   851
<tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   852
<td></td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   853
<td></td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   854
</tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   855
</table>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   856
</p>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   857
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   858
<h4><a name="ExifWrite"/>Writing Exif Images</h4>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   859
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   860
The TIFF writer may be used to write an uncompressed Exif image or the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   861
contents of the <tt>APP1</tt> marker segment of a compressed Exif image.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   862
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   863
<h5><a name="ExifWriteTIFF"/>Writing Uncompressed Exif Images</h5>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   864
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   865
When writing a sequence of images each image is normally recorded as
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   866
{IFD,&nbsp;IFD Value,&nbsp;Image Data}. The Exif specification requires
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   867
that an uncompressed Exif image be structured as follows:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   868
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   869
<ol>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   870
<a name="ExifStructure"/>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   871
<li>Image File Header</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   872
<li>Primary IFD</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   873
<li>Primary IFD Value</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   874
<li>Thumbnail IFD</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   875
<li>Thumbnail IFD Value</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   876
<li>Thumbnail Image Data</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   877
<li>Primary Image Data</li>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   878
</ol>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   879
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   880
To meet the requirement of the primary image data being recorded last, the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   881
primary image must be written initially as an empty image and have its data
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   882
added via pixel replacement after the thumbnail IFD and image data have been
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   883
written:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   884
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   885
<pre><code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   886
    ImageWriter tiffWriter;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   887
    ImageWriteParam tiffWriteParam;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   888
    IIOMetadata tiffStreamMetadata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   889
    IIOMetadata primaryIFD;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   890
    BufferedImage image;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   891
    BufferedImage thumbnail;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   892
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   893
    // Specify uncompressed output.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   894
    tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   895
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   896
    if (thumbnail != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   897
        // Write the TIFF header.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   898
        tiffWriter.prepareWriteSequence(tiffStreamMetadata);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   899
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   900
        // Append the primary IFD.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   901
        tiffWriter.prepareInsertEmpty(-1, // append
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   902
                new ImageTypeSpecifier(image),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   903
                image.getWidth(),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   904
                image.getHeight(),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   905
                primaryIFD,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   906
                null, // thumbnails
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   907
                tiffWriteParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   908
        tiffWriter.endInsertEmpty();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   909
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   910
        // Append the thumbnail image data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   911
        tiffWriter.writeToSequence(new IIOImage(thumbnail, null, null),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   912
                tiffWriteParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   913
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   914
        // Insert the primary image data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   915
        tiffWriter.prepareReplacePixels(0, new Rectangle(image.getWidth(),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   916
                image.getHeight()));
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   917
        tiffWriter.replacePixels(image, tiffWriteParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   918
        tiffWriter.endReplacePixels();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   919
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   920
        // End writing.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   921
        tiffWriter.endWriteSequence();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   922
    } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   923
        // Write only the primary IFD and image data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   924
        tiffWriter.write(tiffStreamMetadata,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   925
                new IIOImage(image, null, primaryIFD),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   926
                tiffWriteParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   927
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   928
</code></pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   929
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   930
<h5><a name="ExifWriteJPEG"/>Writing Compressed Exif Images</h5>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   931
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   932
The structure of the embedded TIFF stream in the <tt>APP1</tt> segment of a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   933
compressed Exif image is identical to the <a href="#ExifStructure">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   934
uncompressed Exif image structure</a> except that there are no primary
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   935
image data, i.e., the primary IFD does not refer to any image data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   936
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   937
<pre><code>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   938
    ImageWriter tiffWriter;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   939
    ImageWriteParam tiffWriteParam;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   940
    IIOMetadata tiffStreamMetadata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   941
    BufferedImage image;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   942
    BufferedImage thumbnail;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   943
    IIOMetadata primaryIFD;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   944
    ImageOutputStream output;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   945
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   946
    // Set up an output to contain the APP1 Exif TIFF stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   947
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   948
    MemoryCacheImageOutputStream app1ExifOutput =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   949
        new MemoryCacheImageOutputStream(baos);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   950
    tiffWriter.setOutput(app1ExifOutput);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   951
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   952
    // Set compression for the thumbnail.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   953
    tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   954
    tiffWriteParam.setCompressionType("Exif JPEG");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   955
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   956
    // Write the APP1 Exif TIFF stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   957
    if (thumbnail != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   958
        // Write the TIFF header.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   959
        tiffWriter.prepareWriteSequence(tiffStreamMetadata);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   960
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   961
        // Append the primary IFD.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   962
        tiffWriter.prepareInsertEmpty(-1, // append
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   963
                new ImageTypeSpecifier(image),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   964
                image.getWidth(),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   965
                image.getHeight(),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   966
                primaryIFD,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   967
                null, // thumbnails
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   968
                tiffWriteParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   969
        tiffWriter.endInsertEmpty();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   970
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   971
        // Append the thumbnail IFD and image data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   972
        tiffWriter.writeToSequence(new IIOImage(thumbnail, null,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   973
                null), tiffWriteParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   974
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   975
        // End writing.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   976
        tiffWriter.endWriteSequence();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   977
    } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   978
        // Write only the primary IFD.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   979
        tiffWriter.prepareWriteEmpty(tiffStreamMetadata,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   980
                new ImageTypeSpecifier(image),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   981
                image.getWidth(),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   982
                image.getHeight(),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   983
                primaryIFD,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   984
                null, // thumbnails
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   985
                tiffWriteParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   986
        tiffWriter.endWriteEmpty();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   987
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   988
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   989
    // Flush data into byte stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   990
    app1ExifOutput.flush();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   991
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   992
    // Create APP1 parameter array.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   993
    byte[] app1Parameters = new byte[6 + baos.size()];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   994
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   995
    // Add APP1 Exif ID bytes.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   996
    app1Parameters[0] = (byte) 'E';
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   997
    app1Parameters[1] = (byte) 'x';
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   998
    app1Parameters[2] = (byte) 'i';
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   999
    app1Parameters[3] = (byte) 'f';
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1000
    app1Parameters[4] = app1Parameters[5] = (byte) 0;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1001
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1002
    // Append TIFF stream to APP1 parameters.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1003
    System.arraycopy(baos.toByteArray(), 0, app1Parameters, 6, baos.size());
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1004
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1005
    // Create the APP1 Exif node to be added to native JPEG image metadata.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1006
    IIOMetadataNode app1Node = new IIOMetadataNode("unknown");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1007
    app1Node.setAttribute("MarkerTag", String.valueOf(0xE1));
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1008
    app1Node.setUserObject(app1Parameters);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1009
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1010
    // Append the APP1 Exif marker to the "markerSequence" node.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1011
    IIOMetadata jpegImageMetadata =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1012
        jpegWriter.getDefaultImageMetadata(new ImageTypeSpecifier(image),
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1013
            jpegWriteParam);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1014
    String nativeFormat = jpegImageMetadata.getNativeMetadataFormatName();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1015
    Node tree = jpegImageMetadata.getAsTree(nativeFormat);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1016
    NodeList children = tree.getChildNodes();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1017
    int numChildren = children.getLength();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1018
    for (int i = 0; i < numChildren; i++) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1019
        Node child = children.item(i);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1020
        if (child.getNodeName().equals("markerSequence")) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1021
            child.appendChild(app1Node);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1022
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1023
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1024
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1025
    jpegImageMetadata.setFromTree(nativeFormat, tree);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1026
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1027
    // Write the JPEG image data including the APP1 Exif marker.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1028
    jpegWriter.setOutput(output);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1029
    jpegWriter.write(new IIOImage(image, null, jpegImageMetadata));
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1030
</code></pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1031
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1032
The <code>"unknown"</code> node created above would be appended to the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1033
<code>"markerSequence"</code> node of the native JPEG image metadata
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1034
and written to the JPEG stream when the primary image is written using
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1035
the JPEG writer.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1036
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1037
<h3><a name="StreamMetadata"/>Stream Metadata</h3>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1038
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1039
The DTD for the TIFF native stream metadata format is as follows:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1040
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1041
<pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1042
&lt;!DOCTYPE "javax_imageio_tiff_stream_1.0" [
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1043
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1044
  &lt;!ELEMENT "javax_imageio_tiff_stream_1.0" (ByteOrder)>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1045
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1046
    &lt;!ELEMENT "ByteOrder" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1047
      &lt;!-- The stream byte order --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1048
      &lt;!ATTLIST "ByteOrder" "value" #CDATA #REQUIRED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1049
        &lt;!-- One of "BIG_ENDIAN" or "LITTLE_ENDIAN" --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1050
        &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1051
]&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1052
</pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1053
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1054
<h3><a name="ImageMetadata"/>Image Metadata</h3>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1055
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1056
The DTD for the TIFF native image metadata format is as follows:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1057
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1058
<pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1059
&lt;!DOCTYPE "javax_imageio_tiff_image_1.0" [
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1060
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1061
  &lt;!ELEMENT "javax_imageio_tiff_image_1.0" (TIFFIFD)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1062
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1063
    &lt;!ELEMENT "TIFFIFD" (TIFFField | TIFFIFD)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1064
      &lt;!-- An IFD (directory) containing fields --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1065
      &lt;!ATTLIST "TIFFIFD" "tagSets" #CDATA #REQUIRED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1066
        &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1067
      &lt;!ATTLIST "TIFFIFD" "parentTagNumber" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1068
        &lt;!-- The tag number of the field pointing to this IFD --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1069
        &lt;!-- Data type: Integer --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1070
      &lt;!ATTLIST "TIFFIFD" "parentTagName" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1071
        &lt;!-- A mnemonic name for the field pointing to this IFD, if known 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1072
             --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1073
        &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1074
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1075
      &lt;!ELEMENT "TIFFField" (TIFFBytes | TIFFAsciis |
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1076
        TIFFShorts | TIFFSShorts | TIFFLongs | TIFFSLongs |
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1077
        TIFFRationals | TIFFSRationals |
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1078
        TIFFFloats | TIFFDoubles | TIFFUndefined)&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1079
        &lt;!-- A field containing data --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1080
        &lt;!ATTLIST "TIFFField" "number" #CDATA #REQUIRED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1081
          &lt;!-- The tag number asociated with the field --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1082
          &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1083
        &lt;!ATTLIST "TIFFField" "name" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1084
          &lt;!-- A mnemonic name associated with the field, if known --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1085
          &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1086
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1087
        &lt;!ELEMENT "TIFFBytes" (TIFFByte)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1088
          &lt;!-- A sequence of TIFFByte nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1089
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1090
          &lt;!ELEMENT "TIFFByte" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1091
            &lt;!-- An integral value between 0 and 255 --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1092
            &lt;!ATTLIST "TIFFByte" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1093
              &lt;!-- The value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1094
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1095
            &lt;!ATTLIST "TIFFByte" "description" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1096
              &lt;!-- A description, if available --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1097
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1098
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1099
        &lt;!ELEMENT "TIFFAsciis" (TIFFAscii)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1100
          &lt;!-- A sequence of TIFFAscii nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1101
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1102
          &lt;!ELEMENT "TIFFAscii" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1103
            &lt;!-- A String value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1104
            &lt;!ATTLIST "TIFFAscii" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1105
              &lt;!-- The value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1106
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1107
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1108
        &lt;!ELEMENT "TIFFShorts" (TIFFShort)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1109
          &lt;!-- A sequence of TIFFShort nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1110
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1111
          &lt;!ELEMENT "TIFFShort" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1112
            &lt;!-- An integral value between 0 and 65535 --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1113
            &lt;!ATTLIST "TIFFShort" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1114
              &lt;!-- The value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1115
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1116
            &lt;!ATTLIST "TIFFShort" "description" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1117
              &lt;!-- A description, if available --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1118
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1119
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1120
        &lt;!ELEMENT "TIFFSShorts" (TIFFSShort)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1121
          &lt;!-- A sequence of TIFFSShort nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1122
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1123
          &lt;!ELEMENT "TIFFSShort" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1124
            &lt;!-- An integral value between -32768 and 32767 --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1125
            &lt;!ATTLIST "TIFFSShort" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1126
              &lt;!-- The value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1127
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1128
            &lt;!ATTLIST "TIFFSShort" "description" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1129
              &lt;!-- A description, if available --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1130
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1131
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1132
        &lt;!ELEMENT "TIFFLongs" (TIFFLong)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1133
          &lt;!-- A sequence of TIFFLong nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1134
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1135
          &lt;!ELEMENT "TIFFLong" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1136
            &lt;!-- An integral value between 0 and 4294967295 --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1137
            &lt;!ATTLIST "TIFFLong" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1138
              &lt;!-- The value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1139
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1140
            &lt;!ATTLIST "TIFFLong" "description" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1141
              &lt;!-- A description, if available --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1142
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1143
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1144
        &lt;!ELEMENT "TIFFSLongs" (TIFFSLong)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1145
          &lt;!-- A sequence of TIFFSLong nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1146
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1147
          &lt;!ELEMENT "TIFFSLong" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1148
            &lt;!-- An integral value between -2147483648 and 2147482647 --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1149
            &lt;!ATTLIST "TIFFSLong" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1150
              &lt;!-- The value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1151
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1152
            &lt;!ATTLIST "TIFFSLong" "description" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1153
              &lt;!-- A description, if available --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1154
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1155
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1156
        &lt;!ELEMENT "TIFFRationals" (TIFFRational)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1157
          &lt;!-- A sequence of TIFFRational nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1158
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1159
          &lt;!ELEMENT "TIFFRational" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1160
            &lt;!-- A rational value consisting of an unsigned numerator and 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1161
                 denominator --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1162
            &lt;!ATTLIST "TIFFRational" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1163
              &lt;!-- The numerator and denominator, separated by a slash --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1164
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1165
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1166
        &lt;!ELEMENT "TIFFSRationals" (TIFFSRational)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1167
          &lt;!-- A sequence of TIFFSRational nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1168
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1169
          &lt;!ELEMENT "TIFFSRational" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1170
            &lt;!-- A rational value consisting of a signed numerator and 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1171
                 denominator --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1172
            &lt;!ATTLIST "TIFFSRational" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1173
              &lt;!-- The numerator and denominator, separated by a slash --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1174
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1175
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1176
        &lt;!ELEMENT "TIFFFloats" (TIFFFloat)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1177
          &lt;!-- A sequence of TIFFFloat nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1178
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1179
          &lt;!ELEMENT "TIFFFloat" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1180
            &lt;!-- A single-precision floating-point value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1181
            &lt;!ATTLIST "TIFFFloat" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1182
              &lt;!-- The value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1183
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1184
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1185
        &lt;!ELEMENT "TIFFDoubles" (TIFFDouble)*&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1186
          &lt;!-- A sequence of TIFFDouble nodes --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1187
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1188
          &lt;!ELEMENT "TIFFDouble" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1189
            &lt;!-- A double-precision floating-point value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1190
            &lt;!ATTLIST "TIFFDouble" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1191
              &lt;!-- The value --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1192
              &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1193
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1194
        &lt;!ELEMENT "TIFFUndefined" EMPTY&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1195
          &lt;!-- Uninterpreted byte data --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1196
          &lt;!ATTLIST "TIFFUndefined" "value" #CDATA #IMPLIED&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1197
            &lt;!-- A list of comma-separated byte values --&gt; 
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1198
            &lt;!-- Data type: String --&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1199
]&gt;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1200
</pre>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1201
35302
e4d2275861c3 8136494: Update "@since 1.9" to "@since 9" to match java.version.specification
iris
parents: 34416
diff changeset
  1202
@since 9
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1203
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1204
</body>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1205
</html>