Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 1 | The Independent JPEG Group's JPEG software |
| 2 | ========================================== |
| 3 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 4 | README for release 4 of 10-Dec-92 |
| 5 | ================================= |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 6 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 7 | This distribution contains the fourth public release of the Independent JPEG |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 8 | Group's free JPEG software. You are welcome to redistribute this software and |
| 9 | to use it for any purpose, subject to the conditions under LEGAL ISSUES, below. |
| 10 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 11 | For installation instructions, see file SETUP. |
| 12 | |
| 13 | For usage instructions, see file USAGE (or the cjpeg.1 and djpeg.1 manual |
| 14 | pages; but USAGE contains a "hints" section not found in the manual pages). |
| 15 | Useful information can also be found in the JPEG FAQ (Frequently Asked |
| 16 | Questions) article; see ARCHIVE LOCATIONS below to obtain the FAQ article. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 17 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 18 | This software is still undergoing revision. Updated versions may be obtained |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 19 | by FTP or UUCP to UUNET and other archive sites; see ARCHIVE LOCATIONS below |
| 20 | for details. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 21 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 22 | Serious users of this software (particularly those incorporating it into |
| 23 | larger programs) should contact jpeg-info@uunet.uu.net to be added to our |
| 24 | electronic mailing list. Mailing list members are notified of updates and |
| 25 | have a chance to participate in technical discussions, etc. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 26 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 27 | This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz, |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 28 | Lee Crocker, Ge' Weijers, and other members of the Independent JPEG Group. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 29 | |
| 30 | |
| 31 | DISCLAIMER |
| 32 | ========== |
| 33 | |
| 34 | THIS SOFTWARE IS NOT COMPLETE NOR FULLY DEBUGGED. It is not guaranteed to be |
| 35 | useful for anything, nor to be compatible with subsequent releases, nor to be |
| 36 | an accurate implementation of the JPEG standard. (See LEGAL ISSUES for even |
| 37 | more disclaimers.) |
| 38 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 39 | Despite that, we believe that this software is pretty good, and if you find |
| 40 | any problems with it, we'd like to know about them. Please report problems |
| 41 | by e-mail to jpeg-info@uunet.uu.net. |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 42 | |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 43 | |
| 44 | WHAT'S HERE |
| 45 | =========== |
| 46 | |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 47 | This distribution contains C software to implement JPEG image compression and |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 48 | decompression. JPEG (pronounced "jay-peg") is a standardized compression |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 49 | method for full-color and gray-scale images. JPEG is intended for compressing |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 50 | "real-world" scenes; cartoons and other non-realistic images are not its |
| 51 | strong suit. JPEG is lossy, meaning that the output image is not necessarily |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 52 | identical to the input image. Hence you must not use JPEG if you have to have |
| 53 | identical output bits. However, on typical images of real-world scenes, very |
| 54 | good compression levels can be obtained with no visible change, and amazingly |
| 55 | high compression levels are possible if you can tolerate a low-quality image. |
| 56 | For more details, see the references, or just experiment with various |
| 57 | compression settings. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 58 | |
| 59 | The software implements JPEG baseline and extended-sequential compression |
| 60 | processes. Provision is made for supporting all variants of these processes, |
| 61 | although some uncommon parameter settings aren't implemented yet. For legal |
| 62 | reasons, we are not distributing code for the arithmetic-coding process; see |
| 63 | LEGAL ISSUES. At present we have made no provision for supporting the |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 64 | progressive, hierarchical, or lossless processes defined in the standard. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 65 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 66 | In order to support file conversion and viewing software, we have included |
| 67 | considerable functionality beyond the bare JPEG coding/decoding capability; |
| 68 | for example, the color quantization modules are not strictly part of JPEG |
| 69 | decoding, but they are essential for output to colormapped file formats or |
| 70 | colormapped displays. These extra functions can be compiled out if not |
| 71 | required for a particular application. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 72 | |
| 73 | The emphasis in designing this software has been on achieving portability and |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 74 | flexibility, while also making it fast enough to be useful. In particular, |
| 75 | the software is not intended to be read as a tutorial on JPEG. (See the |
| 76 | REFERENCES section for introductory material.) While we hope that the entire |
| 77 | package will someday be industrial-strength code, much remains to be done in |
| 78 | performance tuning and in improving the capabilities of individual modules. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 79 | |
| 80 | |
| 81 | This software can be used on several levels: |
| 82 | |
| 83 | * As canned software for JPEG compression and decompression. Just edit the |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 84 | Makefile and configuration files as needed (see file SETUP), compile and go. |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 85 | Members of the Independent JPEG Group will improve the out-of-the-box |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 86 | functionality and speed as time goes on. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 87 | |
| 88 | * As the basis for other JPEG programs. For example, you could incorporate |
| 89 | the decompressor into a general image viewing package by replacing the |
| 90 | output module with write-to-screen functions. For an implementation on |
| 91 | specific hardware, you might want to replace some of the inner loops with |
| 92 | assembly code. For a non-command-line-driven system, you might want a |
| 93 | different user interface. (Members of the group will be producing Macintosh |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 94 | and Amiga versions with more appropriate user interfaces, for example.) |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 95 | |
| 96 | * As a toolkit for experimentation with JPEG and JPEG-like algorithms. Most |
| 97 | of the individual decisions you might want to mess with are packaged up into |
| 98 | separate modules. For example, the details of color-space conversion and |
| 99 | subsampling techniques are each localized in one compressor and one |
| 100 | decompressor module. You'd probably also want to extend the user interface |
| 101 | to give you more detailed control over the JPEG compression parameters. |
| 102 | |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 103 | In particular, we welcome the use of this software as a component of commercial |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 104 | products; no royalty is required. |
| 105 | |
| 106 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 107 | ARCHIVE LOCATIONS |
| 108 | ================= |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 109 | |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 110 | The "official" archive site for this software is ftp.uu.net (Internet |
| 111 | address 137.39.1.9 or 192.48.96.9). The most recent released version can |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 112 | always be found there in directory graphics/jpeg. This particular version |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 113 | will be archived as jpegsrc.v4.tar.Z. If you are on the Internet, you can |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 114 | retrieve files from UUNET by anonymous FTP. If you don't have FTP access, |
| 115 | UUNET's archives are also available via UUCP; contact postmaster@uunet.uu.net |
| 116 | for information on retrieving files that way. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 117 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 118 | Numerous Internet sites maintain copies of the UUNET files; in particular, |
| 119 | you can probably find a copy at any site that archives comp.sources.misc |
| 120 | submissions. However, only ftp.uu.net is guaranteed to have the latest |
| 121 | official version. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 122 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 123 | You can also obtain this software from CompuServe, in the GRAPHSUPPORT forum |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 124 | (GO PICS), library 15; this version will be file jpsrc4.zip. Again, |
| 125 | CompuServe is not guaranteed to have the very latest version. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 126 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 127 | The JPEG FAQ (Frequently Asked Questions) article is a useful source of |
| 128 | general information about JPEG. It is updated constantly and therefore |
| 129 | is not included in this distribution. The FAQ is posted every two weeks |
| 130 | to Usenet newsgroups comp.graphics, news.answers, and other groups. You |
| 131 | can always obtain the latest version from the news.answers archive at |
| 132 | rtfm.mit.edu (18.172.1.27). By FTP, fetch /pub/usenet/news.answers/jpeg-faq. |
| 133 | If you don't have FTP, send e-mail to mail-server@rtfm.mit.edu with body |
| 134 | "send usenet/news.answers/jpeg-faq". |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 135 | |
| 136 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 137 | SUPPORTING SOFTWARE |
| 138 | =================== |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 139 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 140 | You will probably want Jef Poskanzer's PBMPLUS image software, which provides |
| 141 | many useful operations on PPM-format image files. In particular, it can |
| 142 | convert PPM images to and from a wide range of other formats. You can FTP |
| 143 | this free software from export.lcs.mit.edu (contrib/pbmplus*.tar.Z) or |
| 144 | ftp.ee.lbl.gov (pbmplus*.tar.Z). Unfortunately PBMPLUS is not nearly as |
| 145 | portable as the JPEG software is; you are likely to have difficulty making it |
| 146 | work on any non-Unix machine. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 147 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 148 | If you are using X Windows you might want to use the xv or xloadimage viewers |
| 149 | to save yourself the trouble of converting PPM to some other format. Both of |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 150 | these can be found in the contrib directory at export.lcs.mit.edu. Actually, |
| 151 | xv version 2.00 and up incorporates our software and thus can read and write |
| 152 | JPEG files directly. (NOTE: since xv internally reduces all images to 8 |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 153 | bits/pixel, a JPEG file written by xv will not be very high quality; and xv |
| 154 | cannot fully exploit a 24-bit display. These problems are expected to go away |
| 155 | in the next xv release, planned for early 1993. In the meantime, use |
| 156 | xloadimage for 24-bit displays.) |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 157 | |
| 158 | For DOS machines, Lee Crocker's free Piclab program is a useful companion to |
| 159 | the JPEG software. The latest version, currently 1.91, is available by FTP |
| 160 | from SIMTEL20 and its various mirror sites, file <msdos.graphics>piclb191.zip. |
| 161 | CompuServe also has it, in the same library as the JPEG software. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 162 | |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 163 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 164 | SOFTWARE THAT'S NO HELP AT ALL |
| 165 | ============================== |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 166 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 167 | Handmade Software's shareware PC program GIF2JPG produces files that are |
| 168 | totally incompatible with our programs. They use a proprietary format that is |
| 169 | an amalgam of GIF and JPEG representations. However, you can force GIF2JPG |
| 170 | to produce compatible files with its -j switch, and their decompression |
| 171 | program JPG2GIF can read our files (at least ones produced with our default |
| 172 | option settings). |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 173 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 174 | Some commercial JPEG implementations are also incompatible as of this writing, |
| 175 | especially programs released before summer 1991. The root of the problem is |
| 176 | that the ISO JPEG committee failed to specify a concrete file format. Some |
| 177 | vendors "filled in the blanks" on their own, creating proprietary formats that |
| 178 | no one else could read. (For example, none of the early commercial JPEG |
| 179 | implementations for the Macintosh were able to exchange compressed files.) |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 180 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 181 | The file format we have adopted is called JFIF (see REFERENCES). This format |
| 182 | has been agreed to by a number of major commercial JPEG vendors, and we expect |
| 183 | that it will become the de facto standard. JFIF is a minimal representation; |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 184 | work is also going forward to incorporate JPEG compression into the TIFF 6.0 |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 185 | standard, for use in "high end" applications that need to record a lot of |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 186 | additional data about an image. We intend to support TIFF 6.0 in the future. |
| 187 | We hope that these two formats will be sufficient and that other, incompatible |
| 188 | JPEG file formats will not proliferate. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 189 | |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 190 | Indeed, part of the reason for developing and releasing this free software is |
| 191 | to help force rapid convergence to de facto standards for JPEG file formats. |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 192 | SUPPORT STANDARD, NON-PROPRIETARY FORMATS: demand JFIF or TIFF 6.0! |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 193 | |
| 194 | |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 195 | USING JPEG AS A SUBROUTINE IN A LARGER PROGRAM |
| 196 | ============================================== |
| 197 | |
| 198 | You can readily incorporate the JPEG compression and decompression routines in |
| 199 | a larger program. The file example.c provides a skeleton of the interface |
| 200 | routines you'll need for this purpose. Essentially, you replace jcmain.c (for |
| 201 | compression) and/or jdmain.c (for decompression) with your own code. Note |
| 202 | that the fewer JPEG options you allow the user to twiddle, the less code you |
| 203 | need; all the default options are set up automatically. (Alternately, if you |
| 204 | know a lot about JPEG or have a special application, you may want to twiddle |
| 205 | the default options even more extensively than jcmain/jdmain do.) |
| 206 | |
| 207 | Most likely, you will want the uncompressed image to come from memory (for |
| 208 | compression) or go to memory or the screen (for decompression). For this |
| 209 | purpose you must provide image reading or writing routines that match the |
| 210 | interface used by the image file I/O modules (jrdXXX or jwrXXX); again, |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 211 | example.c shows a skeleton of what is required. In this situation, you |
| 212 | won't need any of the non-JPEG image file I/O modules used by cjpeg and djpeg. |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 213 | |
| 214 | By default, any error detected inside the JPEG routines will cause a message |
| 215 | to be printed on stderr, followed by exit(). You can override this behavior |
| 216 | by supplying your own message-printing and/or error-exit routines; again, |
| 217 | example.c shows how. |
| 218 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 219 | We recommend you create libjpeg.a as shown in the Makefile, then link that |
| 220 | with your surrounding program. (If your linker is at all reasonable, only the |
| 221 | code you actually need will get loaded.) Include the files jconfig.h and |
| 222 | jpegdata.h in C files that need to call the JPEG routines. |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 223 | |
| 224 | CAUTION: some people have tried to compile JPEG and their surrounding code |
| 225 | with different compilers, e.g., cc for JPEG and c++ or gcc for the rest. This |
| 226 | is a Real Bad Move and you will deserve what happens to you if you try it. |
| 227 | (Hint: the parameter structures can get laid out differently with no warning.) |
| 228 | |
| 229 | Read our "architecture" file for more info. If it seems to you that the |
| 230 | software structure doesn't accommodate what you want to do, please contact |
| 231 | the authors. |
| 232 | |
| 233 | Beginning with version 3, we will endeavor to hold the interface described by |
| 234 | example.c constant, so that you can plug in updated versions of the JPEG code |
| 235 | just by recompiling. However, we can't guarantee this, especially if you |
| 236 | choose to twiddle any JPEG options not listed in example.c. Check the |
| 237 | CHANGELOG when installing any new version, and compare example.c against the |
| 238 | prior version. Recompile your calling software (don't just relink), as we may |
| 239 | add or subtract fields in the parameter structures. |
| 240 | |
| 241 | |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 242 | REFERENCES |
| 243 | ========== |
| 244 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 245 | We highly recommend reading one or more of these references before trying to |
| 246 | understand the innards of any JPEG software. |
| 247 | |
| 248 | The best short technical introduction to the JPEG compression algorithm is |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 249 | Wallace, Gregory K. "The JPEG Still Picture Compression Standard", |
| 250 | Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. |
| 251 | (Adjacent articles in that issue discuss MPEG motion picture compression, |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 252 | applications of JPEG, and related topics.) If you don't have the CACM issue |
| 253 | handy, a PostScript file containing a revised version of the article is |
| 254 | available at ftp.uu.net, graphics/jpeg/wallace.ps.Z. The file (actually a |
| 255 | preprint for an article to appear in IEEE Trans. Consumer Electronics) omits |
| 256 | the sample images that appeared in CACM, but it includes corrections and some |
| 257 | added material. Note: the Wallace article is copyright ACM and IEEE, and it |
| 258 | may not be used for commercial purposes. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 259 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 260 | A somewhat less technical, more leisurely introduction to JPEG can be found in |
| 261 | "The Data Compression Book" by Mark Nelson, published by M&T Books (Redwood |
| 262 | City, CA), 1991, ISBN 1-55851-216-0. This book provides good explanations and |
| 263 | example C code for a multitude of compression methods including JPEG. It is |
| 264 | an excellent source if you are comfortable reading C code but don't know much |
| 265 | about data compression in general. The book's JPEG sample code is far from |
| 266 | industrial-strength, but when you are ready to look at a full implementation, |
| 267 | you've got one here... |
| 268 | |
| 269 | A new textbook about JPEG is "JPEG Still Image Data Compression Standard" by |
| 270 | William B. Pennebaker and Joan L. Mitchell, published by Van Nostrand |
| 271 | Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95. This book includes the |
| 272 | complete text of the ISO JPEG standards (DIS 10918-1 and draft DIS 10918-2). |
| 273 | This is by far the most complete exposition of JPEG in existence, and I highly |
| 274 | recommend it. If you read the entire book, you will probably know more about |
| 275 | JPEG than I do. |
| 276 | |
| 277 | The JPEG standard itself is not available electronically; you must order a |
| 278 | paper copy through ISO. (Unless you are concerned about having a certified |
| 279 | official copy, I recommend buying the Pennebaker and Mitchell book instead; |
| 280 | it's much cheaper and includes a great deal of useful explanatory material.) |
| 281 | In the US, copies of the standard may be ordered from ANSI Sales at (212) |
| 282 | 642-4900. It's not cheap: as of 1992, Part 1 is $95 and Part 2 is $47, plus |
| 283 | 7% shipping/handling. The standard is divided into two parts, Part 1 being |
| 284 | the actual specification, while Part 2 covers compliance testing methods. |
| 285 | As of early 1992, Part 1 has Draft International Standard status. It is |
| 286 | titled "Digital Compression and Coding of Continuous-tone Still Images, Part |
| 287 | 1: Requirements and guidelines" and has document number ISO/IEC DIS 10918-1. |
| 288 | Part 2 is still at Committee Draft status. It is titled "Digital Compression |
| 289 | and Coding of Continuous-tone Still Images, Part 2: Compliance testing" and |
| 290 | has document number ISO/IEC CD 10918-2. (NOTE: I'm told that the final |
| 291 | version of Part 2 will differ considerably from the CD draft.) |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 292 | |
| 293 | The JPEG standard does not specify all details of an interchangeable file |
| 294 | format. For the omitted details we follow the "JFIF" conventions, revision |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 295 | 1.02. A copy of the JFIF spec is available from: |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 296 | Literature Department |
| 297 | C-Cube Microsystems, Inc. |
| 298 | 399A West Trimble Road |
| 299 | San Jose, CA 95131 |
| 300 | (408) 944-6300 |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 301 | A PostScript version of this document is available at ftp.uu.net, file |
| 302 | graphics/jpeg/jfif.ps.Z. It can also be obtained by e-mail from the C-Cube |
| 303 | mail server, netlib@c3.pla.ca.us. Send the message "send jfif_ps from jpeg" |
| 304 | to the server to obtain the JFIF document; send the message "help" if you have |
| 305 | trouble. |
| 306 | |
| 307 | The TIFF 6.0 file format specification can be obtained by FTP from sgi.com |
| 308 | (192.48.153.1), file graphics/tiff/TIFF6.ps.Z; or you can order a printed copy |
| 309 | from Aldus Corp. at (206) 628-6593. It should be noted that the TIFF 6.0 spec |
| 310 | of 3-June-92 has a number of serious problems in its JPEG features. A |
| 311 | clarification note will probably be needed to ensure that TIFF JPEG files are |
| 312 | compatible across different implementations. The IJG does not intend to |
| 313 | support TIFF 6.0 until these problems are resolved. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 314 | |
| 315 | If you want to understand this implementation, start by reading the |
| 316 | "architecture" documentation file. Please read "codingrules" if you want to |
| 317 | contribute any code. |
| 318 | |
| 319 | |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 320 | LEGAL ISSUES |
| 321 | ============ |
| 322 | |
| 323 | The authors make NO WARRANTY or representation, either express or implied, |
| 324 | with respect to this software, its quality, accuracy, merchantability, or |
| 325 | fitness for a particular purpose. This software is provided "AS IS", and you, |
| 326 | its user, assume the entire risk as to its quality and accuracy. |
| 327 | |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 328 | This software is copyright (C) 1991, 1992, Thomas G. Lane. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 329 | All Rights Reserved except as specified below. |
| 330 | |
| 331 | Permission is hereby granted to use, copy, modify, and distribute this |
| 332 | software (or portions thereof) for any purpose, without fee, subject to these |
| 333 | conditions: |
| 334 | (1) If any part of the source code for this software is distributed, then this |
| 335 | README file must be included, with this copyright and no-warranty notice |
| 336 | unaltered; and any additions, deletions, or changes to the original files |
| 337 | must be clearly indicated in accompanying documentation. |
| 338 | (2) If only executable code is distributed, then the accompanying |
| 339 | documentation must state that "this software is based in part on the work of |
| 340 | the Independent JPEG Group". |
| 341 | (3) Permission for use of this software is granted only if the user accepts |
| 342 | full responsibility for any undesirable consequences; the authors accept |
| 343 | NO LIABILITY for damages of any kind. |
| 344 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 345 | Permission is NOT granted for the use of any IJG author's name or company name |
| 346 | in advertising or publicity relating to this software or products derived from |
| 347 | it. This software may be referred to only as "the Independent JPEG Group's |
| 348 | software". |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 349 | |
| 350 | We specifically permit and encourage the use of this software as the basis of |
| 351 | commercial products, provided that all warranty or liability claims are |
| 352 | assumed by the product vendor. |
| 353 | |
| 354 | |
| 355 | ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, |
| 356 | sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. |
| 357 | ansi2knr.c is NOT covered by the above copyright and conditions, but instead |
| 358 | by the usual distribution terms of the Free Software Foundation; principally, |
| 359 | that you must include source code if you redistribute it. (See the file |
| 360 | ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 361 | of any program generated from the JPEG code, this does not limit you more than |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 362 | the foregoing paragraphs do. |
| 363 | |
| 364 | |
| 365 | It appears that the arithmetic coding option of the JPEG spec is covered by |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 366 | patents owned by IBM and AT&T, as well as a pending Japanese patent of |
| 367 | Mitsubishi. Hence arithmetic coding cannot legally be used without obtaining |
| 368 | one or more licenses. For this reason, support for arithmetic coding has been |
| 369 | removed from the free JPEG software. (Since arithmetic coding provides only a |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 370 | marginal gain over the unpatented Huffman mode, it is unlikely that very many |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 371 | implementors will support it. If you do obtain the necessary licenses, |
Thomas G. Lane | bd543f0 | 1991-12-13 00:00:00 +0000 | [diff] [blame] | 372 | contact jpeg-info@uunet.uu.net for a copy of our arithmetic coding modules.) |
| 373 | So far as we are aware, there are no patent restrictions on the remaining |
| 374 | code. |
| 375 | |
| 376 | |
| 377 | We are required to state that |
| 378 | "The Graphics Interchange Format(c) is the Copyright property of |
| 379 | CompuServe Incorporated. GIF(sm) is a Service Mark property of |
| 380 | CompuServe Incorporated." |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 381 | |
| 382 | |
| 383 | TO DO |
| 384 | ===== |
| 385 | |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 386 | The next major release will probably be a significant rewrite to allow use of |
| 387 | this code in conjunction with Sam Leffler's free TIFF library (assuming the |
| 388 | bugs in the TIFF 6.0 specification get resolved). |
| 389 | |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 390 | Many of the modules need fleshing out to provide more complete |
Thomas G. Lane | 4a6b730 | 1992-03-17 00:00:00 +0000 | [diff] [blame] | 391 | implementations, or to provide faster paths for common cases. |
Thomas G. Lane | 88aeed4 | 1992-12-10 00:00:00 +0000 | [diff] [blame^] | 392 | Speeding things up is still high on our priority list. |
Thomas G. Lane | 2cbeb8a | 1991-10-07 00:00:00 +0000 | [diff] [blame] | 393 | |
| 394 | We'd appreciate it if people would compile and check out the code on as wide a |
| 395 | variety of systems as possible, and report any portability problems |
| 396 | encountered (with solutions, if possible). Checks of file compatibility with |
| 397 | other JPEG implementations would also be of interest. Finally, we would |
| 398 | appreciate code profiles showing where the most time is spent, especially on |
| 399 | unusual systems. |
| 400 | |
| 401 | Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net. |