blob: 49f3d7ffff85704c9c956086df32b42c59c9541e [file] [log] [blame]
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +00001USAGE instructions for the Independent JPEG Group's JPEG software
2=================================================================
3
4This file describes usage of the JPEG conversion programs cjpeg and djpeg,
Thomas G. Lanebc79e061995-08-02 00:00:00 +00005as well as the utility programs jpegtran, rdjpgcom and wrjpgcom. (See
6the other documentation files if you wish to use the JPEG library within
7your own programs.)
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +00008
9If you are on a Unix machine you may prefer to read the Unix-style manual
Thomas G. Lanebc79e061995-08-02 00:00:00 +000010pages in files cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000011
12
13INTRODUCTION
14
15These programs implement JPEG image compression and decompression. JPEG
16(pronounced "jay-peg") is a standardized compression method for full-color
17and gray-scale images. JPEG is designed to handle "real-world" scenes,
18for example scanned photographs. Cartoons, line drawings, and other
19non-realistic images are not JPEG's strong suit; on that sort of material
20you may get poor image quality and/or little compression.
21
22JPEG is lossy, meaning that the output image is not necessarily identical to
23the input image. Hence you should not use JPEG if you have to have identical
24output bits. However, on typical real-world images, very good compression
25levels can be obtained with no visible change, and amazingly high compression
26is possible if you can tolerate a low-quality image. You can trade off image
27quality against file size by adjusting the compressor's "quality" setting.
28
29
30GENERAL USAGE
31
32We provide two programs, cjpeg to compress an image file into JPEG format,
33and djpeg to decompress a JPEG file back into a conventional image format.
34
35On Unix-like systems, you say:
36 cjpeg [switches] [imagefile] >jpegfile
37or
38 djpeg [switches] [jpegfile] >imagefile
39The programs read the specified input file, or standard input if none is
40named. They always write to standard output (with trace/error messages to
41standard error). These conventions are handy for piping images between
42programs.
43
44On most non-Unix systems, you say:
45 cjpeg [switches] imagefile jpegfile
46or
47 djpeg [switches] jpegfile imagefile
48i.e., both the input and output files are named on the command line. This
49style is a little more foolproof, and it loses no functionality if you don't
50have pipes. (You can get this style on Unix too, if you prefer, by defining
51TWO_FILE_COMMANDLINE when you compile the programs; see install.doc.)
52
53You can also say:
54 cjpeg [switches] -outfile jpegfile imagefile
55or
56 djpeg [switches] -outfile imagefile jpegfile
57This syntax works on all systems, so it is useful for scripts.
58
59The currently supported image file formats are: PPM (PBMPLUS color format),
60PGM (PBMPLUS gray-scale format), BMP, GIF, Targa, and RLE (Utah Raster Toolkit
61format). (RLE is supported only if the URT library is available.)
62cjpeg recognizes the input image format automatically, with the exception
63of some Targa-format files. You have to tell djpeg which format to generate.
64
65JPEG files are in the defacto standard JFIF file format. There are other,
66less widely used JPEG-based file formats, but we don't support them.
67
68All switch names may be abbreviated; for example, -grayscale may be written
69-gray or -gr. Most of the "basic" switches can be abbreviated to as little as
70one letter. Upper and lower case are equivalent (-GIF is the same as -gif).
71British spellings are also accepted (e.g., -greyscale), though for brevity
72these are not mentioned below.
73
74
75CJPEG DETAILS
76
77The basic command line switches for cjpeg are:
78
79 -quality N Scale quantization tables to adjust image quality.
80 Quality is 0 (worst) to 100 (best); default is 75.
81 (See below for more info.)
82
83 -grayscale Create monochrome JPEG file from color input.
84 Be sure to use this switch when compressing a grayscale
85 GIF file, because cjpeg isn't bright enough to notice
86 whether a GIF file uses only shades of gray. By
87 saying -grayscale, you'll get a smaller JPEG file that
88 takes less time to process.
89
90 -optimize Perform optimization of entropy encoding parameters.
91 Without this, default encoding parameters are used.
92 -optimize usually makes the JPEG file a little smaller,
93 but cjpeg runs somewhat slower and needs much more
94 memory. Image quality and speed of decompression are
95 unaffected by -optimize.
96
Thomas G. Lanebc79e061995-08-02 00:00:00 +000097 -progressive Create progressive JPEG file (see below).
98
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +000099 -targa Input file is Targa format. Targa files that contain
100 an "identification" field will not be automatically
101 recognized by cjpeg; for such files you must specify
102 -targa to make cjpeg treat the input as Targa format.
103 For most Targa files, you won't need this switch.
104
105The -quality switch lets you trade off compressed file size against quality of
106the reconstructed image: the higher the quality setting, the larger the JPEG
107file, and the closer the output image will be to the original input. Normally
108you want to use the lowest quality setting (smallest file) that decompresses
109into something visually indistinguishable from the original image. For this
110purpose the quality setting should be between 50 and 95; the default of 75 is
111often about right. If you see defects at -quality 75, then go up 5 or 10
112counts at a time until you are happy with the output image. (The optimal
113setting will vary from one image to another.)
114
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000115-quality 100 will generate a quantization table of all 1's, minimizing loss
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000116in the quantization step (but there is still information loss in subsampling,
117as well as roundoff error). This setting is mainly of interest for
118experimental purposes. Quality values above about 95 are NOT recommended for
119normal use; the compressed file size goes up dramatically for hardly any gain
120in output image quality.
121
122In the other direction, quality values below 50 will produce very small files
123of low image quality. Settings around 5 to 10 might be useful in preparing an
124index of a large image library, for example. Try -quality 2 (or so) for some
125amusing Cubist effects. (Note: quality values below about 25 generate 2-byte
126quantization tables, which are considered optional in the JPEG standard.
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000127cjpeg emits a warning message when you give such a quality value, because some
128other JPEG programs may be unable to decode the resulting file. Use -baseline
129if you need to ensure compatibility at low quality values.)
130
131The -progressive switch creates a "progressive JPEG" file. In this type of
132JPEG file, the data is stored in multiple scans of increasing quality. If the
133file is being transmitted over a slow communications link, the decoder can use
134the first scan to display a low-quality image very quickly, and can then
135improve the display with each subsequent scan. The final image is exactly
136equivalent to a standard JPEG file of the same quality setting, and the total
137file size is about the same --- often a little smaller. CAUTION: progressive
138JPEG is not yet widely implemented, so many decoders will be unable to view a
139progressive JPEG file at all.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000140
141Switches for advanced users:
142
143 -dct int Use integer DCT method (default).
144 -dct fast Use fast integer DCT (less accurate).
145 -dct float Use floating-point DCT method.
Thomas G. Lanea8b67c41995-03-15 00:00:00 +0000146 The float method is very slightly more accurate than
147 the int method, but is much slower unless your machine
148 has very fast floating-point hardware. Also note that
149 results of the floating-point method may vary slightly
150 across machines, while the integer methods should give
151 the same results everywhere. The fast integer method
152 is much less accurate than the other two.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000153
154 -restart N Emit a JPEG restart marker every N MCU rows, or every
155 N MCU blocks if "B" is attached to the number.
156 -restart 0 (the default) means no restart markers.
157
158 -smooth N Smooth the input image to eliminate dithering noise.
159 N, ranging from 1 to 100, indicates the strength of
160 smoothing. 0 (the default) means no smoothing.
161
162 -maxmemory N Set limit for amount of memory to use in processing
163 large images. Value is in thousands of bytes, or
164 millions of bytes if "M" is attached to the number.
165 For example, -max 4m selects 4000000 bytes. If more
166 space is needed, temporary files will be used.
167
168 -verbose Enable debug printout. More -v's give more printout.
169 or -debug Also, version information is printed at startup.
170
171The -restart option inserts extra markers that allow a JPEG decoder to
172resynchronize after a transmission error. Without restart markers, any damage
173to a compressed file will usually ruin the image from the point of the error
174to the end of the image; with restart markers, the damage is usually confined
175to the portion of the image up to the next restart marker. Of course, the
176restart markers occupy extra space. We recommend -restart 1 for images that
177will be transmitted across unreliable networks such as Usenet.
178
179The -smooth option filters the input to eliminate fine-scale noise. This is
180often useful when converting GIF files to JPEG: a moderate smoothing factor of
18110 to 50 gets rid of dithering patterns in the input file, resulting in a
182smaller JPEG file and a better-looking image. Too large a smoothing factor
183will visibly blur the image, however.
184
185Switches for wizards:
186
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000187 -baseline Force a baseline JPEG file to be generated. This
188 clamps quantization values to 8 bits even at low
189 quality settings.
190
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000191 -qtables file Use the quantization tables given in the specified
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000192 text file.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000193
194 -qslots N[,...] Select which quantization table to use for each color
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000195 component.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000196
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000197 -sample HxV[,...] Set JPEG sampling factors for each color component.
198
199 -scans file Use the scan script given in the specified text file.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000200
201The "wizard" switches are intended for experimentation with JPEG. If you
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000202don't know what you are doing, DON'T USE THEM. These switches are documented
203further in the file wizard.doc.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000204
205
206DJPEG DETAILS
207
208The basic command line switches for djpeg are:
209
210 -colors N Reduce image to at most N colors. This reduces the
211 or -quantize N number of colors used in the output image, so that it
212 can be displayed on a colormapped display or stored in
213 a colormapped file format. For example, if you have
214 an 8-bit display, you'd need to reduce to 256 or fewer
215 colors. (-colors is the recommended name, -quantize
216 is provided only for backwards compatibility.)
217
218 -fast Select recommended processing options for fast, low
219 quality output. (The default options are chosen for
220 highest quality output.) Currently, this is equivalent
221 to "-dct fast -nosmooth -onepass -dither ordered".
222
223 -grayscale Force gray-scale output even if JPEG file is color.
224 Useful for viewing on monochrome displays; also,
225 djpeg runs noticeably faster in this mode.
226
227 -scale M/N Scale the output image by a factor M/N. Currently
228 the scale factor must be 1/1, 1/2, 1/4, or 1/8.
229 Scaling is handy if the image is larger than your
230 screen; also, djpeg runs much faster when scaling
231 down the output.
232
233 -bmp Select BMP output format (Windows flavor). 8-bit
234 colormapped format is emitted if -colors or -grayscale
235 is specified, or if the JPEG file is gray-scale;
236 otherwise, 24-bit full-color format is emitted.
237
238 -gif Select GIF output format. Since GIF does not support
239 more than 256 colors, -colors 256 is assumed (unless
240 you specify a smaller number of colors). If you
241 specify -fast, the default number of colors is 216.
242
243 -os2 Select BMP output format (OS/2 1.x flavor). 8-bit
244 colormapped format is emitted if -colors or -grayscale
245 is specified, or if the JPEG file is gray-scale;
246 otherwise, 24-bit full-color format is emitted.
247
248 -pnm Select PBMPLUS (PPM/PGM) output format (this is the
249 default format). PGM is emitted if the JPEG file is
250 gray-scale or if -grayscale is specified; otherwise
251 PPM is emitted.
252
253 -rle Select RLE output format. (Requires URT library.)
254
255 -targa Select Targa output format. Gray-scale format is
256 emitted if the JPEG file is gray-scale or if
257 -grayscale is specified; otherwise, colormapped format
258 is emitted if -colors is specified; otherwise, 24-bit
259 full-color format is emitted.
260
261Switches for advanced users:
262
263 -dct int Use integer DCT method (default).
264 -dct fast Use fast integer DCT (less accurate).
265 -dct float Use floating-point DCT method.
Thomas G. Lanea8b67c41995-03-15 00:00:00 +0000266 The float method is very slightly more accurate than
267 the int method, but is much slower unless your machine
268 has very fast floating-point hardware. Also note that
269 results of the floating-point method may vary slightly
270 across machines, while the integer methods should give
271 the same results everywhere. The fast integer method
272 is much less accurate than the other two.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000273
274 -dither fs Use Floyd-Steinberg dithering in color quantization.
275 -dither ordered Use ordered dithering in color quantization.
276 -dither none Do not use dithering in color quantization.
277 By default, Floyd-Steinberg dithering is applied when
278 quantizing colors; this is slow but usually produces
279 the best results. Ordered dither is a compromise
280 between speed and quality; no dithering is fast but
281 usually looks awful. Note that these switches have
282 no effect unless color quantization is being done.
283 Ordered dither is only available in -onepass mode.
284
285 -map FILE Quantize to the colors used in the specified image
286 file. This is useful for producing multiple files
287 with identical color maps, or for forcing a predefined
288 set of colors to be used. The FILE must be a GIF
289 or PPM file. This option overrides -colors and
290 -onepass.
291
292 -nosmooth Use a faster, lower-quality upsampling routine.
293
294 -onepass Use one-pass instead of two-pass color quantization.
295 The one-pass method is faster and needs less memory,
296 but it produces a lower-quality image. -onepass is
297 ignored unless you also say -colors N. Also,
298 the one-pass method is always used for gray-scale
299 output (the two-pass method is no improvement then).
300
301 -maxmemory N Set limit for amount of memory to use in processing
302 large images. Value is in thousands of bytes, or
303 millions of bytes if "M" is attached to the number.
304 For example, -max 4m selects 4000000 bytes. If more
305 space is needed, temporary files will be used.
306
307 -verbose Enable debug printout. More -v's give more printout.
308 or -debug Also, version information is printed at startup.
309
310
311HINTS FOR CJPEG
312
313Color GIF files are not the ideal input for JPEG; JPEG is really intended for
314compressing full-color (24-bit) images. In particular, don't try to convert
315cartoons, line drawings, and other images that have only a few distinct
316colors. GIF works great on these, JPEG does not. If you want to convert a
317GIF to JPEG, you should experiment with cjpeg's -quality and -smooth options
318to get a satisfactory conversion. -smooth 10 or so is often helpful.
319
320Avoid running an image through a series of JPEG compression/decompression
321cycles. Image quality loss will accumulate; after ten or so cycles the image
322may be noticeably worse than it was after one cycle. It's best to use a
323lossless format while manipulating an image, then convert to JPEG format when
324you are ready to file the image away.
325
326The -optimize option to cjpeg is worth using when you are making a "final"
327version for posting or archiving. It's also a win when you are using low
328quality settings to make very small JPEG files; the percentage improvement
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000329is often a lot more than it is on larger files. (At present, -optimize
330mode is always selected when generating progressive JPEG files.)
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000331
332
333HINTS FOR DJPEG
334
335To get a quick preview of an image, use the -grayscale and/or -scale switches.
336"-grayscale -scale 1/8" is the fastest case.
337
338Several options are available that trade off image quality to gain speed.
339"-fast" turns on the recommended settings.
340
341"-dct fast" and/or "-nosmooth" gain speed at a small sacrifice in quality.
342When producing a color-quantized image, "-onepass -dither ordered" is fast but
343much lower quality than the default behavior. "-dither none" may give
344acceptable results in two-pass mode, but is seldom tolerable in one-pass mode.
345
346If you are fortunate enough to have very fast floating point hardware,
Thomas G. Lanea8b67c41995-03-15 00:00:00 +0000347"-dct float" may be even faster than "-dct fast". But on most machines
348"-dct float" is slower than "-dct int"; in this case it is not worth using,
349because its theoretical accuracy advantage is too small to be significant
350in practice.
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000351
352Two-pass color quantization requires a good deal of memory; on MS-DOS machines
353it may run out of memory even with -maxmemory 0. In that case you can still
354decompress, with some loss of image quality, by specifying -onepass for
355one-pass quantization.
356
357
358HINTS FOR BOTH PROGRAMS
359
360If more space is needed than will fit in the available main memory (as
361determined by -maxmemory), temporary files will be used. (MS-DOS versions
362will try to get extended or expanded memory first.) The temporary files are
363often rather large: in typical cases they occupy three bytes per pixel, for
364example 3*800*600 = 1.44Mb for an 800x600 image. If you don't have enough
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000365free disk space, leave out -progressive and -optimize (for cjpeg) or specify
366-onepass (for djpeg).
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000367
368On MS-DOS, the temporary files are created in the directory named by the TMP
369or TEMP environment variable, or in the current directory if neither of those
370exist. Amiga implementations put the temp files in the directory named by
371JPEGTMP:, so be sure to assign JPEGTMP: to a disk partition with adequate free
372space.
373
374The default memory usage limit (-maxmemory) is set when the software is
375compiled. If you get an "insufficient memory" error, try specifying a smaller
376-maxmemory value, even -maxmemory 0 to use the absolute minimum space. You
377may want to recompile with a smaller default value if this happens often.
378
379On machines that have "environment" variables, you can define the environment
380variable JPEGMEM to set the default memory limit. The value is specified as
381described for the -maxmemory switch. JPEGMEM overrides the default value
382specified when the program was compiled, and itself is overridden by an
383explicit -maxmemory switch.
384
385On MS-DOS machines, -maxmemory is the amount of main (conventional) memory to
386use. (Extended or expanded memory is also used if available.) Most
387DOS-specific versions of this software do their own memory space estimation
388and do not need you to specify -maxmemory.
389
390
Thomas G. Lanebc79e061995-08-02 00:00:00 +0000391JPEGTRAN
392
393jpegtran translates JPEG files from one variant of JPEG to another, for
394example from baseline JPEG to progressive JPEG or vice versa. The
395transformation is lossless: no image degradation occurs, which would not
396be true if you used djpeg followed by cjpeg. However, you cannot alter
397the image quality, because that would not be a lossless operation.
398
399jpegtran operates similarly to cjpeg, except that it reads a JPEG file
400and writes another JPEG file.
401
402jpegtran accepts a subset of the switches recognized by cjpeg:
403 -outfile filename
404 -optimize
405 -progressive
406 -restart N
407 -scans file
408 -maxmemory N
409 -verbose
410 -debug
411See the previous discussion of cjpeg for details about these switches.
412
413If you specify no switches, you get a plain baseline-JPEG output file.
414
415
Thomas G. Lane36a4ccc1994-09-24 00:00:00 +0000416THE COMMENT UTILITIES
417
418The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file.
419Although the standard doesn't actually define what COM blocks are for, they
420are widely used to hold user-supplied text strings. This lets you add
421annotations, titles, index terms, etc to your JPEG files, and later retrieve
422them as text. COM blocks do not interfere with the image stored in the JPEG
423file. The maximum size of a COM block is 64K, but you can have as many of
424them as you like in one JPEG file.
425
426We provide two utility programs to display COM block contents and add COM
427blocks to a JPEG file.
428
429rdjpgcom searches a JPEG file and prints the contents of any COM blocks on
430standard output. The command line syntax is
431 rdjpgcom [-verbose] [inputfilename]
432The switch "-verbose" (or just "-v") causes rdjpgcom to also display the JPEG
433image dimensions. If you omit the input file name from the command line,
434the JPEG file is read from standard input. (This may not work on some
435operating systems, if binary data can't be read from stdin.)
436
437wrjpgcom adds a COM block, containing text you provide, to a JPEG file.
438Ordinarily, the COM block is added after any existing COM blocks, but you
439can delete the old COM blocks if you wish. wrjpgcom produces a new JPEG
440file; it does not modify the input file. DO NOT try to overwrite the input
441file by directing wrjpgcom's output back into it; on most systems this will
442just destroy your file.
443
444The command line syntax for wrjpgcom is similar to cjpeg's. On Unix-like
445systems, it is
446 wrjpgcom [switches] [inputfilename]
447The output file is written to standard output. The input file comes from
448the named file, or from standard input if no input file is named.
449
450On most non-Unix systems, the syntax is
451 wrjpgcom [switches] inputfilename outputfilename
452where both input and output file names must be given explicitly.
453
454wrjpgcom understands three switches:
455 -replace Delete any existing COM blocks from the file.
456 -comment "Comment text" Supply new COM text on command line.
457 -cfile name Read text for new COM block from named file.
458(Switch names can be abbreviated.) If you have only one line of comment text
459to add, you can provide it on the command line with -comment. The comment
460text must be surrounded with quotes so that it is treated as a single
461argument. Longer comments can be read from a text file.
462
463If you give neither -comment nor -cfile, then wrjpgcom will read the comment
464text from standard input. (In this case an input image file name MUST be
465supplied, so that the source JPEG file comes from somewhere else.) You can
466enter multiple lines, up to 64KB worth. Type an end-of-file indicator
467(usually control-D or control-Z) to terminate the comment text entry.
468
469wrjpgcom will not add a COM block if the provided comment string is empty.
470Therefore -replace -comment "" can be used to delete all COM blocks from a
471file.
472
473These utility programs do not depend on the IJG JPEG library. In
474particular, the source code for rdjpgcom is intended as an illustration of
475the minimum amount of code required to parse a JPEG file header correctly.