361 lines
18 KiB
Plaintext
361 lines
18 KiB
Plaintext
The Independent JPEG Group's JPEG software
|
|
==========================================
|
|
|
|
README for release 3 of 17-Mar-92
|
|
==================================
|
|
|
|
This distribution contains the third official release of the Independent JPEG
|
|
Group's free JPEG software. You are welcome to redistribute this software and
|
|
to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
|
|
|
|
For installation instructions, see file SETUP; for usage instructions, see
|
|
file USAGE (or the cjpeg.1 and djpeg.1 manual pages).
|
|
|
|
This software is still undergoing revision. Updated versions may be obtained
|
|
by FTP or UUCP to UUNET and other archive sites; see ARCHIVE LOCATIONS below
|
|
for details.
|
|
|
|
If you intend to become a serious user of this software, please contact
|
|
jpeg-info@uunet.uu.net to be added to our electronic mailing list. Then
|
|
you'll be notified of updates and have a chance to participate in discussions,
|
|
etc.
|
|
|
|
This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz,
|
|
Lee Crocker, Ge' Weijers, and other members of the Independent JPEG Group.
|
|
|
|
|
|
DISCLAIMER
|
|
==========
|
|
|
|
THIS SOFTWARE IS NOT COMPLETE NOR FULLY DEBUGGED. It is not guaranteed to be
|
|
useful for anything, nor to be compatible with subsequent releases, nor to be
|
|
an accurate implementation of the JPEG standard. (See LEGAL ISSUES for even
|
|
more disclaimers.)
|
|
|
|
Please report any problems with this software to jpeg-info@uunet.uu.net.
|
|
|
|
|
|
WHAT'S HERE
|
|
===========
|
|
|
|
This distribution contains C software to implement JPEG image compression and
|
|
decompression. JPEG (pronounced "jay-peg") is a standardized compression
|
|
method for full-color and gray-scale images. JPEG is intended for
|
|
"real-world" scenes; cartoons and other non-realistic images are not its
|
|
strong suit. JPEG is lossy, meaning that the output image is not necessarily
|
|
identical to the input image. Hence you should not use JPEG if you have to
|
|
have identical output bits. However, on typical images of real-world scenes,
|
|
very good compression levels can be obtained with no visible change, and
|
|
amazingly high compression levels can be obtained if you can tolerate a
|
|
low-quality image. For more details, see the references, or just experiment
|
|
with various compression settings.
|
|
|
|
The software implements JPEG baseline and extended-sequential 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 process; see
|
|
LEGAL ISSUES. At present we have made no provision for supporting the
|
|
progressive, hierarchical, or lossless processes defined in the standard.
|
|
|
|
The present software is not far beyond the prototype stage. It does not
|
|
support all possible variants of the JPEG standard, and some functions have
|
|
rather slow and/or crude implementations. However, it is useful already.
|
|
|
|
The emphasis in designing this software has been on achieving portability and
|
|
flexibility, while also making it fast enough to be useful. We have not yet
|
|
undertaken serious performance measurement or tuning; we intend to do so in
|
|
the future.
|
|
|
|
|
|
This software can be used on several levels:
|
|
|
|
* As canned software for JPEG compression and decompression. Just edit the
|
|
Makefile and configuration files as needed (see file SETUP), compile and go.
|
|
Members of the Independent JPEG Group will improve the out-of-the-box
|
|
functionality and speed as time goes on.
|
|
|
|
* As the basis for other JPEG programs. For example, you could incorporate
|
|
the decompressor into a general image viewing package by replacing the
|
|
output module with write-to-screen functions. For an implementation on
|
|
specific hardware, you might want to replace some of the inner loops with
|
|
assembly code. For a non-command-line-driven system, you might want a
|
|
different user interface. (Members of the group will be producing Macintosh
|
|
and Amiga versions with more appropriate user interfaces, for example.)
|
|
|
|
* As a toolkit for experimentation with JPEG and JPEG-like algorithms. Most
|
|
of the individual decisions you might want to mess with are packaged up into
|
|
separate modules. For example, the details of color-space conversion and
|
|
subsampling techniques are each localized in one compressor and one
|
|
decompressor module. You'd probably also want to extend the user interface
|
|
to give you more detailed control over the JPEG compression parameters.
|
|
|
|
In particular, we welcome the use of this software as a component of commercial
|
|
products; no royalty is required.
|
|
|
|
|
|
ARCHIVE LOCATIONS
|
|
=================
|
|
|
|
The "official" archive site for this software is ftp.uu.net (Internet
|
|
address 137.39.1.9 or 192.48.96.9). The most recent released version can
|
|
always be found there in directory graphics/jpeg. This particular version
|
|
will be archived as jpegsrc.v3.tar.Z. If you are on the Internet, you can
|
|
retrieve files from UUNET by anonymous FTP. If you don't have FTP access,
|
|
UUNET's archives are also available via UUCP; contact postmaster@uunet.uu.net
|
|
for information on retrieving files that way.
|
|
|
|
Various other Internet sites maintain copies of the UUNET file, which may or
|
|
may not be up-to-date. In Europe, try nic.funet.fi (128.214.6.100; look in
|
|
directory pub/graphics/programs/jpeg).
|
|
|
|
You can also obtain this software from CompuServe, in the GRAPHSUPPORT forum
|
|
(GO PICS), library 10; this version will be file jpsrc3.zip.
|
|
|
|
If you are not reasonably handy at configuring and installing portable C
|
|
programs, you may have some difficulty installing this package. You may
|
|
prefer to obtain a pre-built executable version. A collection of pre-built
|
|
executables for various machines is currently available for anonymous FTP at
|
|
procyon.cis.ksu.edu (129.130.10.80 --- this number is due to change soon);
|
|
look under /pub/JPEG. The administrators of this system ask that FTP traffic
|
|
be limited to non-prime hours. For more information on this archive, please
|
|
contact Steve Davis (strat@cis.ksu.edu). This collection is not maintained by
|
|
the Independent JPEG Group, and programs in it may not be the latest version.
|
|
|
|
|
|
SUPPORTING SOFTWARE
|
|
===================
|
|
|
|
You will probably want Jef Poskanzer's PBMPLUS image software, which provides
|
|
many useful operations on PPM-format image files. In particular, it can
|
|
convert PPM images to and from a wide range of other formats. You can FTP
|
|
this free software from export.lcs.mit.edu (contrib/pbmplus*.tar.Z) or
|
|
ftp.ee.lbl.gov (pbmplus*.tar.Z). Unfortunately PBMPLUS is not nearly as
|
|
portable as the JPEG software is; you are likely to have difficulty making it
|
|
work on any non-Unix machine.
|
|
|
|
If you are using X Windows you might want to use the xv or xloadimage viewers
|
|
to save yourself the trouble of converting PPM to some other format. Both of
|
|
these can be found in the contrib directory at export.lcs.mit.edu. Actually,
|
|
xv version 2.00 and up incorporates our software and thus can read and write
|
|
JPEG files directly. (NOTE: since xv internally reduces all images to 8
|
|
bits/pixel, a JPEG file written by xv will not be very high quality; you may
|
|
also prefer xloadimage for viewing if you have a 24-bit display. Caveat user.)
|
|
|
|
For DOS machines, Lee Crocker's free Piclab program is a useful companion to
|
|
the JPEG software. The latest version, currently 1.91, is available by FTP
|
|
from SIMTEL20 and its various mirror sites, file <msdos.graphics>piclb191.zip.
|
|
CompuServe also has it, in the same library as the JPEG software.
|
|
|
|
|
|
SOFTWARE THAT'S NO HELP AT ALL
|
|
==============================
|
|
|
|
Handmade Software's shareware PC program GIF2JPG produces files that are
|
|
totally incompatible with our programs. They use a proprietary format that is
|
|
an amalgam of GIF and JPEG representations. However, you can force GIF2JPG
|
|
to produce compatible files with its -j switch, and their decompression
|
|
program JPG2GIF can read our files (at least ones produced with our default
|
|
option settings).
|
|
|
|
Unfortunately, many commercial JPEG implementations are also incompatible as
|
|
of this writing, especially programs released before summer 1991. The root of
|
|
the problem is that the ISO JPEG committee failed to specify a concrete file
|
|
format. Some vendors "filled in the blanks" on their own, creating
|
|
proprietary formats that no one else could read. (For example, none of the
|
|
early commercial JPEG implementations for the Macintosh were able to exchange
|
|
compressed files.)
|
|
|
|
The file format we have adopted is called JFIF (see REFERENCES). This format
|
|
has been agreed to by a number of major commercial JPEG vendors, and we expect
|
|
that it will become the de facto standard. JFIF is a minimal representation;
|
|
work is also going forward to incorporate JPEG compression into the TIFF
|
|
standard, for use in "high end" applications that need to record a lot of
|
|
additional data about an image. We intend to support JPEG-in-TIFF in the
|
|
future. We hope that these two formats will be sufficient and that other,
|
|
incompatible JPEG file formats will not proliferate.
|
|
|
|
Indeed, part of the reason for developing and releasing this free software is
|
|
to help force rapid convergence to de facto standards for JPEG file formats.
|
|
SUPPORT STANDARD, NON-PROPRIETARY FORMATS: demand JFIF or JPEG-in-TIFF!
|
|
|
|
|
|
USING JPEG AS A SUBROUTINE IN A LARGER PROGRAM
|
|
==============================================
|
|
|
|
You can readily incorporate the JPEG compression and decompression routines in
|
|
a larger program. The file example.c provides a skeleton of the interface
|
|
routines you'll need for this purpose. Essentially, you replace jcmain.c (for
|
|
compression) and/or jdmain.c (for decompression) with your own code. Note
|
|
that the fewer JPEG options you allow the user to twiddle, the less code you
|
|
need; all the default options are set up automatically. (Alternately, if you
|
|
know a lot about JPEG or have a special application, you may want to twiddle
|
|
the default options even more extensively than jcmain/jdmain do.)
|
|
|
|
Most likely, you will want the uncompressed image to come from memory (for
|
|
compression) or go to memory or the screen (for decompression). For this
|
|
purpose you must provide image reading or writing routines that match the
|
|
interface used by the image file I/O modules (jrdXXX or jwrXXX); again,
|
|
example.c shows a skeleton of what is required.
|
|
|
|
By default, any error detected inside the JPEG routines will cause a message
|
|
to be printed on stderr, followed by exit(). You can override this behavior
|
|
by supplying your own message-printing and/or error-exit routines; again,
|
|
example.c shows how.
|
|
|
|
Mechanics: we recommend you create libjpeg.a as shown in the Makefile, then
|
|
link that with your surrounding program. (If your linker is at all
|
|
reasonable, only the code you actually need will get loaded.) Include the
|
|
files jconfig.h and jpegdata.h in C files that need to call the JPEG routines.
|
|
|
|
CAUTION: some people have tried to compile JPEG and their surrounding code
|
|
with different compilers, e.g., cc for JPEG and c++ or gcc for the rest. This
|
|
is a Real Bad Move and you will deserve what happens to you if you try it.
|
|
(Hint: the parameter structures can get laid out differently with no warning.)
|
|
|
|
Read our "architecture" file for more info. If it seems to you that the
|
|
software structure doesn't accommodate what you want to do, please contact
|
|
the authors.
|
|
|
|
Beginning with version 3, we will endeavor to hold the interface described by
|
|
example.c constant, so that you can plug in updated versions of the JPEG code
|
|
just by recompiling. However, we can't guarantee this, especially if you
|
|
choose to twiddle any JPEG options not listed in example.c. Check the
|
|
CHANGELOG when installing any new version, and compare example.c against the
|
|
prior version. Recompile your calling software (don't just relink), as we may
|
|
add or subtract fields in the parameter structures.
|
|
|
|
|
|
REFERENCES
|
|
==========
|
|
|
|
The best and most readily available introduction to the JPEG compression
|
|
algorithm is Wallace's article in the April '91 CACM:
|
|
Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
|
|
Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
|
|
(Adjacent articles in that issue discuss MPEG motion picture compression,
|
|
applications of JPEG, and related topics.) We highly recommend reading that
|
|
article before trying to understand the innards of any JPEG software.
|
|
If you don't have the CACM issue handy, a PostScript file containing a revised
|
|
version of the article is available at ftp.uu.net, graphics/jpeg/wallace.ps.Z.
|
|
The file (actually a preprint for an article to appear 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.
|
|
|
|
For more detail about the JPEG standard you pretty much have to go to the
|
|
draft standard (which is not nearly as intelligible as Wallace's article).
|
|
The standard is not now available electronically; you must order a paper copy
|
|
through ISO. In the US, copies may be ordered from ANSI Sales at (212)
|
|
642-4900. The standard is divided into two parts: Part 1 is the actual
|
|
specification, and Part 2 covers compliance testing methods. The current
|
|
"committee draft" version of Part 1 is titled "Digital Compression and Coding
|
|
of Continuous-tone Still Images, Part 1: Requirements and guidelines" and has
|
|
document number ISO/IEC CD 10918-1. (The alternate number SC2 N2215 should
|
|
also be mentioned when ordering.) This draft is expected to be superseded by
|
|
the Draft International Standard version around the end of November 1991.
|
|
Ordering info will be the same as above, but replace "CD" with "DIS" in the
|
|
document number (alternate number not yet known). The committee draft of
|
|
Part 2 is expected to be available around the end of December 1991. It will
|
|
be titled "Digital Compression and Coding of Continuous-tone Still Images,
|
|
Part 2: Compliance testing" and will have document number ISO/IEC CD 10918-2
|
|
(alternate number not yet known).
|
|
|
|
The JPEG standard does not specify all details of an interchangeable file
|
|
format. For the omitted details we follow the "JFIF" conventions, revision
|
|
1.01. A copy of the JFIF spec is available from:
|
|
Literature Department
|
|
C-Cube Microsystems, Inc.
|
|
399A West Trimble Road
|
|
San Jose, CA 95131
|
|
(408) 944-6300
|
|
The same source can supply copies of the draft JPEG-in-TIFF documents
|
|
(Appendixes O and P to the TIFF spec). PostScript versions of these
|
|
documents can also be obtained by e-mail from the C-Cube mail server,
|
|
netlib@c3.pla.ca.us. Send the message "send jfif_ps from jpeg" to obtain the
|
|
JFIF document; "send app_o_ps from jpeg" and "send app_p_ps from jpeg" will
|
|
produce the TIFF documents. Send the message "help" if you have trouble.
|
|
|
|
If you want to understand this implementation, start by reading the
|
|
"architecture" documentation file. Please read "codingrules" if you want to
|
|
contribute any code.
|
|
|
|
|
|
LEGAL ISSUES
|
|
============
|
|
|
|
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, 1992, 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".
|
|
(3) 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.
|
|
|
|
Permission is NOT granted for the use of any author's name or author's 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 product generated from the JPEG code, this does not limit you more than
|
|
the foregoing paragraphs do.
|
|
|
|
|
|
It appears that the arithmetic coding option of the JPEG spec is covered by
|
|
patents owned by IBM and AT&T, as well as a pending Japanese patent of
|
|
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
|
|
people will choose to use it. If you do obtain the necessary licenses,
|
|
contact jpeg-info@uunet.uu.net for a copy of our arithmetic coding modules.)
|
|
So far as we are aware, there are no patent restrictions on the remaining
|
|
code.
|
|
|
|
|
|
We are required to state that
|
|
"The Graphics Interchange Format(c) is the Copyright property of
|
|
CompuServe Incorporated. GIF(sm) is a Service Mark property of
|
|
CompuServe Incorporated."
|
|
|
|
|
|
TO DO
|
|
=====
|
|
|
|
Many of the modules need fleshing out to provide more complete
|
|
implementations, or to provide faster paths for common cases.
|
|
Improving the speed will be the next big work item for the JPEG group.
|
|
|
|
We'd appreciate it if people would compile and check out the code on as wide a
|
|
variety of systems as possible, and report any portability problems
|
|
encountered (with solutions, if possible). Checks of file compatibility with
|
|
other JPEG implementations would also be of interest. Finally, we would
|
|
appreciate code profiles showing where the most time is spent, especially on
|
|
unusual systems.
|
|
|
|
Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net.
|