(Adjacent articles
in
that issue discuss MPEG
motion
picture compression, applications of
JPEG,
and related
topics.) If you don't have the CACM issue handy, a
PostScript file containing a revised version of Wallace's
article
IS
available at ftp://ftp.uu.net/graphics/jpeg/
wallace.ps.gz. The file (actually a preprint for
an
article
that appeared
in
IEEE
Trans. Consumer Electronics)
omits
the sample images that appeared
in
CACM, but it includes
corrections and some added material. Note: the Wallace
article is copyright ACM and
IEEE,
and it may not be used
for commercial purposes.
A
somewhat
less technical, more leisurely introduction
to JPEG can be found
in
"The Data Compression
Book"
by Mark Nelson and Jean-Ioup Gailly, published by
M&T
Books (New
York),
2nd ed. 1996, ISBN 1-55851-434-1. This
book provides good explanations and example C code for
a multitude of compression methods including
JPEG.
It
is
an
excellent source if you are comfortable reading C
code but don't
know
much
about data compression
in
general. The book's JPEG sample code is far from
industrial-strength, but
when
you are ready to look at a full
implementation, you've
got
one here
...
The best full description of
JPEG
is the textbook 'JPEG
Still Image Data Compression Standard" by William
B.
Pennebaker and Joan
L.
Mitchell, published by
Van
Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price
US$59.95, 638 pp.
The book includes the complete text
of
the
ISO
JPEG
standards
(DIS
10918-1 and draft
DIS
10918-2).
This is by far the most
complete
exposition of JPEG
in
existence, and
we
highly recommend it.
The JPEG standard itself is not available electronically;
you
must
order a paper
copy
through
ISO
or
ITU.
(Unless
you feel a need to
own
a certified official copy,
we
recommend buying the Pennebaker and Mitchell
book
instead; it's much cheaper and includes a great deal
of
useful explanatory material.)
In
the USA, copies of the standard may be ordered
from
ANSI Sales at (212) 642-4900, or from Global Engineering
Documents at (800) 854-7179 (ANSI doesn't take credit
card orders, but Global does.) It's not cheap: as of 1992,
ANSI
was
charging $95 for Part 1 and $47 for
Part
2,
plus
7%
shipping/handling. The standard is divided into
two
parts, Part 1 being the actual specification, while Part 2
covers compliance testing methods. Part 1 is titled "Digital
Compression and Coding of Continuous-tone Still Images,
Part
l'
Requirements and gUidelines" and has
document
numbers ISO/IEC
IS
10918-1,
ITU-T
181
Part
2
IS
titled
"Digital Compression and Coding of Continuous-tone Still
Images, Part
2:
Compliance testing" and has
document
numbers ISOIIEC
IS
10918-2,
ITU-T
183.
Some extensions to the original
JPEG
standard are defined
in
JPEG Part
3,
a newer
ISO
standard numbered ISO/IEC
IS
10918-3 and
ITU-T
T84.
IJG
currently does not support
any Part 3 extensions.
The JPEG standard does not specify all details of
an
interchangeable file format.
For
the omitted details
we
follow the 'JFIF" conventions, reVision 1.02. A copy of the
JFIF spec
is
available from:
Literature Department
C-Cube Microsystems, Inc.
1778 McCarthy Blvd.
Milpitas,
CA
95035
phone (4081944-6300, fax (408) 944-6314
These conditions apply to any software derived from or
based on the
IJG
code, not just to the unmodified library.
If you use our work, you ought to acknowledge us.
Permission
is
NOT granted for the use of any
IJG
author's
name or company name
in
advertising or publicity relating
to this software
or
products derived from
It
This software
may be referred to only
as
"the
Independent JPEG Group's
software".
We specifically permit and encourage the use of this
software
as
the basis of commercial products, prOVided
that all warranty or liability claims are assumed by
the
product vendor.
ansi2knr.c
is
included in this distribution by permission of
L.
Peter Deutsch, sole proprietor of its copyright holder,
Aladdin Enterprises of
Menlo
Park,
CA.
ansi2knr.c
is
NOT covered by the above copyright and
conditions, but instead by the usual distribution terms of
the Free Software Foundation; principally, that you
must
include source code if you redistribute it. (See the file
ansi2knr.c for full details.) However, since ansi2knr.c is
not needed
as
part of any program generated
from
the
IJG
code, this does not limit you more than the foregoing
paragraphs do.
The Unix configuration script "configure"
was
produced
with
GNU
Autoconf.
It is copyright by the Free Software Foundation but
is
freely distributable.
The same holds for its supporting scripts (config.
guess, config.sub, Itconfig, Itmain.shl. Another support
script, install-sh,
is
copyright by
M.IT
but is also freely
distributable.
It appears that the arithmetic coding option of the JPEG
spec is covered by patents owned by IBM,
AT&T.
and
Mitsubishi. Hence arithmetic coding cannot legally be
used
without
obtaining one or more licenses.
For
this
reason, support for arithmetic coding has been removed
from the free
JPEG
software.
(Since arithmetic coding provides only a marginal gain
over the unpatented Huffman mode, it is unlikely that very
many implementations will support it.)
So
far
as
we
are aware, there are
no
patent restrictions on
the remaining code.
The
IJG
distribution formerly included code to read and
write
GIF
files.
To
avoid entanglement
with
the Unisys LZW patent,
GIF
reading support has been removed altogether, and the
GIF
writer
has been simplified to produce "uncompressed
GIFs". This technique does not use the LZWalgorithm; the
resulting
GIF
files are larger than usual, but are readable by
all standard
GIF
decoders.
We are required to state that
"The Graphics Interchange Format(cl is the Copyright
property of CompuServe Incorporated. GIF(sm) is a
Service Mark property
of
CompuServe
Incorporated"
REFERENCES
We highly recommend reading one or more of these
references before trying to understand the innards of the
JPEG
software
The best short technical introduction to the JPEG
compression algorithm is
Wallace, Gregory
K.
"The
JPEG
Still Picture
Compression Standard", Communications of the ACM,
April
1991
(vol. 34 no.
4),
pp. 30-44.
The
library is intended to be reused
in
other applications.
In
order to support file conversion and viewing software,
we
have included considerable functionality beyond the
bare
JPEG
coding/decoding capability; for example, the
color quantization modules are not strictly part of
JPEG
decoding, but they are essential for
output
to colormapped
file formats or colormapped displays. These extra functions
can be compiled out of the library if
not
required for a
particular application.
We
have also included "jpegtran",
a utility for lossless transcoding
between
different
JPEG
processes, and "rdjpgcom" and
"wrjpgcom",
two
simple
applications for inserting and extracting textual comments
in
JFIF files
The emphasis
in
designing this software has been on
achieving portability and flexibility,
while
also making it
fast enough to be useful
In
particular, the software
is
not intended to be read
as
a tutorial on
JPEG.
(See the
REFERENCES
section for introductory material.) Rather,
it is intended to be reliable, portable, industrial-strength
code. We do not claim
to
have achieved that goal
in
every
aspect of the software, but
we
strive for it.
We
welcome
the use of this software
as
a component of
commercial products.
No royalty is required, but
we
do
ask for
an
acknowledgement
in
product documentation,
as
described
under LEGAL
ISSUES
LEGAL
ISSUES
In
plain English:
1.
We don't promise that this software works. (But if you
find any bugs, please let us
know!)
2.
You
can use this software for whatever you want.
You
don't have to pay us.
3.
You
may not pretend that you
wrote
this software.
If you use it
in
a program, you
must
acknowledge
somewhere
in
your documentation that you've used
the
IJG
code.
In
legalese:
The authors make
NO
WARRANTY or representation,
either express or implied, with respect to this software, its
quality, accuracy, merchantability, or fitness for a particular
purpose. This software
is
provided 'AS IS", and you, its
user,
assume the entire risk
as
to its quality and accuracy.
This software
is
copyright
(C)
1991-1998, Thomas G
Lane.
All Rights Reserved except
as
specified
below
Permission
is
hereby granted to use, copy, modify, and
distribute this software (or portions thereof) for any
purpose,
without
fee, subject to these conditions:
(1) If any part of the source code for this software
is
distributed, then this README file
must
be included,
with this copyright and no-warranty notice unaltered;
and any additions, deletions, or changes to the original
files must be clearly indicated
in
accompanying
documentation.
(2)
If only executable code
is
distributed, then the
accompanying documentation must state that
"this software
is
based
in
part
on
the work of the
Independent
JPEG
Group"
(31
Permission for use of this software
is
granted only
if
the user accepts full responsibility for any undesirable
consequences; the authors accept
NO
LIABILITY for
damages of any kind.
change
• 1
usage.doc
wizard.doc
Install.doc
structure.doc
change.log
example.c
filelist.doc
coderules.doc
How
to configure and install the
IJG
software.
Usage instructions for cjpeg,
djpeg, jpegtran, rdlpgcom, and
wrjpgcom.
Unix-style man pages for
programs (same info
as
usage.
doc).
Advanced usage instructions for
JPEG
wizards only
Version-to-version
highlights.
Programmer and internal documentation:
libjpeg.doc
How
to use the JPEG library
in
your own programs.
Sample code for calling the
JPEG
library.
Overview of the JPEG library's
internal structure.
Road map of
IJG
files.
Coding style rules - please read
if you contribute code.
Please read at least the files install.doc and usage.doc.
Useful information can also be found
in
the JPEG
FAQ
(Frequently Asked Questions) article. See ARCHIVE
LOCATIONS below to find out where to obtain the
FAQ
article.
If you
want
to understand
how
the
JPEG
code works,
we
suggest reading one or more of the
REFERENCES,
then
looking at the documentation files (in roughly the order
listed) before diving into the code.
OVERVIEW
This package contains C
softwareto
implementJPEG image
compression and decompression. JPEG (pronounced "jay-
peg") is a standardized compression method for full-color
and gray-scale images. JPEG
is
intended for compressing
"real-world" scenes; line drawings, cartoons and other
non-realistic images are not its strong suit. JPEG is lossy,
meaning that the output image
is
not exactly identical to
the input image. Hence you must not use JPEG if you
have to have identical
output
bits. However, on typical
photographic images, very good compression levels can
be obtained with no visible change, and remarkably high
compression levels are possible if you can tolerate a
low-
quality image.
For
more details, see the references, or just
experiment
with
various compression settings.
This software implements
JPEG
baseline, extended-
sequential, and progressive
compression processes. Provision is made for supporting
all variants
of
these
processes, although
some
uncommon
parameter settings
aren't implemented yet.
For legal reasons,
we
are not distributing code for
the
arithmetic-coding
variants of JPEG; see LEGAL
ISSUES
We
have made no
provision for supporting
the hierarchical or lossless processes defined
in
the
standard.
We provide a set of library routines for reading and writing
JPEG
image files, plus
two
sample applications "cjpeg"
and "djpeg", which use the library to perform conversion
between JPEG and some other popular image file
formats.
5 LICENSE