/*
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
The main package of the Java Image I/O API.
Many common image I/O operations may be performed using the static methods of the ImageIO
class.
This package contains the basic classes and interfaces for describing the contents of image files, including metadata and thumbnails (IIOImage
); for controlling the image reading process (ImageReader
, ImageReadParam
, and ImageTypeSpecifier
) and image writing process (ImageWriter
and ImageWriteParam
); for performing transcoding between formats (ImageTranscoder
), and for reporting errors (IIOException
).
All implementations of javax.imageio provide the following standard image
format plug-ins:
Standard image format plug-ins
Image format
Reading
Writing
Notes
Metadata
BMP
yes
yes
none
BMP
metadata format
GIF
yes
yes
GIF plug-in notes
GIF
metadata format
JPEG
yes
yes
none
JPEG metadata format
PNG
yes
yes
none
PNG
metadata format
TIFF
yes
yes
TIFF plug-in
notes
TIFF
metadata format
WBMP
yes
yes
none
WBMP metadata format
Standard Plug-in Notes
Standard plug-in for GIF image format
ImageIO provides ImageReader
and ImageWriter
plug-ins for the Graphics
Interchange Format (GIF) image format. These are the "standard" GIF
plug-ins, meaning those that are included in the JRE, as distinct from those
included in standard extensions, or 3rd party plug-ins. The following notes
and metadata specification apply to the standard plug-ins.
Writing GIF images
The GIF image writer plug-in guarantees lossless writing for images which
meet the following requirements:
- the number of bands is 1;
- the number of bits per sample is not greater than 8;
- the size of a color component is not greater than 8;
By default the GIF writer plug-in creates version "89a" images. This can be
changed to "87a" by explicitly setting the version in the stream metadata
(see
GIF Stream Metadata Format Specification).
The GIF writer plug-in supports the creation of animated GIF images through the standard sequence writing methods defined in the ImageWriter
class.
A global color table is written to the output stream if one of the following
conditions is met:
- stream metadata containing a GlobalColorTable element is supplied;
- a sequence is being written and image metadata containing a
LocalColorTable element is supplied for the first image in the sequence;
- image metadata is not supplied or does not contain a LocalColorTable
element.
In the first case the global color table in the stream metadata is used, in
the second the local color table in the image metadata is used, and in the
third a global color table is created from the ColorModel or SampleModel of
the (first) image.
A local color table is written to the output stream only if image metadata
containing a LocalColorTable element is supplied to the writer, or no image
metadata is supplied to the writer and the local color table which would be
generated from the image itself is not equal to the global color table.
A Graphic Control Extension block is written to the output stream only if
image metadata containing a GraphicControlExtension element is supplied to
the writer, or no image metadata is supplied and the local color table
generated from the image requires a transparent index. Application, Plain
Text, and Comment Extension blocks are written only if they are supplied to
the writer via image metadata.
The writing of interlaced images can be controlled by the progressive mode of the provided ImageWriteParam
instance. If progressive mode is MODE_DISABLED
then a non-interlaced image will be written. If progressive mode is MODE_DEFAULT
then an interlaced image will be written. If progressive mode is MODE_COPY_FROM_METADATA
, then the metadata setting is used (if it is provided, otherwise an interlaced image will be written).
The GIF image writer plug-in supports setting output stream metadata from
metadata supplied to the writer in either the native GIF stream metadata
format
javax_imageio_gif_stream_1.0 or the standard metadata format
javax_imageio_1.0,
and setting output image metadata from metadata supplied to the writer in
either the native GIF image metadata format
javax_imageio_gif_image_1.0 or the standard metadata format
javax_imageio_1.0.
The mapping of standard metadata format to the GIF native stream and image
metadata formats is given in the tables
here.
Since: 1.4
/**
* The main package of the Java Image I/O API.
* <p>
* Many common image I/O operations may be performed using the static methods of
* the {@code ImageIO} class.
* <p>
* This package contains the basic classes and interfaces for describing the
* contents of image files, including metadata and thumbnails
* ({@code IIOImage}); for controlling the image reading process
* ({@code ImageReader}, {@code ImageReadParam}, and {@code ImageTypeSpecifier})
* and image writing process ({@code ImageWriter} and {@code ImageWriteParam});
* for performing transcoding between formats ({@code ImageTranscoder}), and for
* reporting errors ({@code IIOException}).
* <p>
* All implementations of javax.imageio provide the following standard image
* format plug-ins:
*
* <table class="striped">
* <caption>Standard image format plug-ins</caption>
* <thead>
* <tr>
* <th scope="col">Image format
* <th scope="col">Reading
* <th scope="col">Writing
* <th scope="col">Notes
* <th scope="col">Metadata
* </thead>
* <tbody>
* <!-- BMP plugin -->
* <tr>
* <th scope="row">
* <a href="https://msdn.microsoft.com/en-us/library/dd183391.aspx">BMP</a>
* <td>yes
* <td>yes
* <td>none
* <td><a href='metadata/doc-files/bmp_metadata.html'>BMP
* metadata format</a>
* <!-- GIF plugin -->
* <tr>
* <th scope="row">
* <a href="http://www.w3.org/Graphics/GIF/spec-gif89a.txt">GIF</a>
* <td>yes
* <td>yes
* <td><a href="#gif_plugin_notes">GIF plug-in notes</a>
* <td><a href='metadata/doc-files/gif_metadata.html'>GIF
* metadata format</a>
* <!-- JPEG plugin -->
* <tr>
* <th scope="row"><a href="http://www.jpeg.org">JPEG</a>
* <td>yes
* <td>yes
* <td>none
* <td><a href='metadata/doc-files/jpeg_metadata.html'>
* JPEG metadata format</a>
* <!-- PNG plugin -->
* <tr>
* <th scope="row"><a href="http://www.libpng.org/pub/png/spec/">PNG</a>
* <td>yes
* <td>yes
* <td>none
* <td><a href='metadata/doc-files/png_metadata.html'>PNG
* metadata format</a>
* <!-- TIFF plugin -->
* <tr>
* <th scope="row">
* <a href="https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf">
* TIFF</a>
* <td>yes
* <td>yes
* <td>
* <a href='metadata/doc-files/tiff_metadata.html#Reading'>TIFF plug-in
* notes</a>
* <td>
* <a href='metadata/doc-files/tiff_metadata.html#StreamMetadata'>TIFF
* metadata format</a>
* <!-- WBMP plugin -->
* <tr>
* <th scope="row">
* <a href="http://www.wapforum.org/what/technical/SPEC-WAESpec-19990524.pdf">
* WBMP</a>
* <td>yes
* <td>yes
* <td>none
* <td><a href='metadata/doc-files/wbmp_metadata.html'>
* WBMP metadata format</a>
* </tbody>
* </table>
*
* <h2> Standard Plug-in Notes</h2>
*
* <h3><a id="gif_plugin_notes">Standard plug-in for GIF image format</a></h3>
* ImageIO provides {@code ImageReader} and {@code ImageWriter}plug-ins for the
* <a href="http://www.w3.org/Graphics/GIF/spec-gif89a.txt"> Graphics
* Interchange Format (GIF)</a> image format. These are the "standard" GIF
* plug-ins, meaning those that are included in the JRE, as distinct from those
* included in standard extensions, or 3rd party plug-ins. The following notes
* and metadata specification apply to the standard plug-ins.
*
* <h3>Writing GIF images</h3>
* The GIF image writer plug-in guarantees lossless writing for images which
* meet the following requirements:
* <ul>
* <li>the number of bands is 1;</li>
* <li>the number of bits per sample is not greater than 8;</li>
* <li>the size of a color component is not greater than 8;</li>
* </ul>
* <p>
* By default the GIF writer plug-in creates version "89a" images. This can be
* changed to "87a" by explicitly setting the version in the stream metadata
* (see
* <a href="metadata/doc-files/gif_metadata.html#gif_stream_metadata_format">
* GIF Stream Metadata Format Specification</a>).
*
* <!-- animated images -->
* <p>
* The GIF writer plug-in supports the creation of animated GIF images through
* the standard sequence writing methods defined in the {@code ImageWriter}
* class.
*
* <!-- TODO: add example here -->
*
* <!-- color tables -->
* <p>
* A global color table is written to the output stream if one of the following
* conditions is met:
* <ul>
* <li>stream metadata containing a GlobalColorTable element is supplied;
* </li>
* <li>a sequence is being written and image metadata containing a
* LocalColorTable element is supplied for the first image in the sequence;
* </li>
* <li>image metadata is not supplied or does not contain a LocalColorTable
* element.</li>
* </ul>
* <p>
* In the first case the global color table in the stream metadata is used, in
* the second the local color table in the image metadata is used, and in the
* third a global color table is created from the ColorModel or SampleModel of
* the (first) image.
* <p>
* A local color table is written to the output stream only if image metadata
* containing a LocalColorTable element is supplied to the writer, or no image
* metadata is supplied to the writer and the local color table which would be
* generated from the image itself is not equal to the global color table.
* <p>
* A Graphic Control Extension block is written to the output stream only if
* image metadata containing a GraphicControlExtension element is supplied to
* the writer, or no image metadata is supplied and the local color table
* generated from the image requires a transparent index. Application, Plain
* Text, and Comment Extension blocks are written only if they are supplied to
* the writer via image metadata.
*
* <!-- writing interlaced images -->
* <p>
* The writing of interlaced images can be controlled by the progressive mode of
* the provided {@code ImageWriteParam} instance. If progressive mode is
* {@code MODE_DISABLED} then a non-interlaced image will be written. If
* progressive mode is {@code MODE_DEFAULT} then an interlaced image will be
* written. If progressive mode is {@code MODE_COPY_FROM_METADATA}, then the
* metadata setting is used (if it is provided, otherwise an interlaced image
* will be written).
* <p>
* The GIF image writer plug-in supports setting output stream metadata from
* metadata supplied to the writer in either the native GIF stream metadata
* format
* <a href="metadata/doc-files/gif_metadata.html#gif_stream_metadata_format">
* javax_imageio_gif_stream_1.0</a> or the standard metadata format
* <a href="metadata/doc-files/standard_metadata.html">javax_imageio_1.0</a>,
* and setting output image metadata from metadata supplied to the writer in
* either the native GIF image metadata format
* <a href="metadata/doc-files/gif_metadata.html#gif_image_metadata_format">
* javax_imageio_gif_image_1.0</a> or the standard metadata format
* <a href="metadata/doc-files/standard_metadata.html">javax_imageio_1.0</a>.
* The mapping of standard metadata format to the GIF native stream and image
* metadata formats is given in the tables
* <a href="metadata/doc-files/gif_metadata.html#mapping">here</a>.
*
* @since 1.4
*/
package javax.imageio;