1USAGE instructions for the Independent JPEG Group's JPEG software 2================================================================= 3 4This file describes usage of the JPEG conversion programs cjpeg and djpeg, 5as 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.) 8 9If you are on a Unix machine you may prefer to read the Unix-style manual 10pages in files cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1. 11 12 13INTRODUCTION 14 15These programs implement JPEG image encoding, decoding, and transcoding. 16JPEG (pronounced "jay-peg") is a standardized compression method for 17full-color and grayscale images. 18 19 20GENERAL USAGE 21 22We provide two programs, cjpeg to compress an image file into JPEG format, 23and djpeg to decompress a JPEG file back into a conventional image format. 24 25On Unix-like systems, you say: 26 cjpeg [switches] [imagefile] >jpegfile 27or 28 djpeg [switches] [jpegfile] >imagefile 29The programs read the specified input file, or standard input if none is 30named. They always write to standard output (with trace/error messages to 31standard error). These conventions are handy for piping images between 32programs. 33 34On most non-Unix systems, you say: 35 cjpeg [switches] imagefile jpegfile 36or 37 djpeg [switches] jpegfile imagefile 38i.e., both the input and output files are named on the command line. This 39style is a little more foolproof, and it loses no functionality if you don't 40have pipes. (You can get this style on Unix too, if you prefer, by defining 41TWO_FILE_COMMANDLINE when you compile the programs; see install.txt.) 42 43You can also say: 44 cjpeg [switches] -outfile jpegfile imagefile 45or 46 djpeg [switches] -outfile imagefile jpegfile 47This syntax works on all systems, so it is useful for scripts. 48 49The currently supported image file formats are: PPM (PBMPLUS color format), 50PGM (PBMPLUS grayscale format), BMP, Targa, and RLE (Utah Raster Toolkit 51format). (RLE is supported only if the URT library is available, which it 52isn't on most non-Unix systems.) cjpeg recognizes the input image format 53automatically, with the exception of some Targa-format files. You have to 54tell djpeg which format to generate. 55 56JPEG files are in the standard JFIF file format. There are other, 57less widely used JPEG-based file formats, but we don't support them. 58 59All switch names may be abbreviated; for example, -grayscale may be written 60-gray or -gr. Most of the "basic" switches can be abbreviated to as little as 61one letter. Upper and lower case are equivalent (-BMP is the same as -bmp). 62British spellings are also accepted (e.g., -greyscale), though for brevity 63these are not mentioned below. 64 65 66CJPEG DETAILS 67 68The basic command line switches for cjpeg are: 69 70 -quality N[,...] Scale quantization tables to adjust image quality. 71 Quality is 0 (worst) to 100 (best); default is 75. 72 (See below for more info.) 73 74 -grayscale Create monochrome JPEG file from color input. 75 Be sure to use this switch when compressing a grayscale 76 BMP file, because cjpeg isn't bright enough to notice 77 whether a BMP file uses only shades of gray. By 78 saying -grayscale, you'll get a smaller JPEG file that 79 takes less time to process. 80 81 -rgb Create RGB JPEG file. 82 Using this switch suppresses the conversion from RGB 83 colorspace input to the default YCbCr JPEG colorspace. 84 You can use this switch in combination with the 85 -block N switch (see below) for lossless JPEG coding. 86 See also the -rgb1 switch below. 87 88 -optimize Perform optimization of entropy encoding parameters. 89 Without this, default encoding parameters are used. 90 -optimize usually makes the JPEG file a little smaller, 91 but cjpeg runs somewhat slower and needs much more 92 memory. Image quality and speed of decompression are 93 unaffected by -optimize. 94 95 -progressive Create progressive JPEG file (see below). 96 97 -scale M/N Scale the output image by a factor M/N. Currently 98 supported scale factors are M/N with all N from 1 to 99 16, where M is the destination DCT size, which is 8 by 100 default (see -block N switch below). 101 102 -targa Input file is Targa format. Targa files that contain 103 an "identification" field will not be automatically 104 recognized by cjpeg; for such files you must specify 105 -targa to make cjpeg treat the input as Targa format. 106 For most Targa files, you won't need this switch. 107 108The -quality switch lets you trade off compressed file size against quality of 109the reconstructed image: the higher the quality setting, the larger the JPEG 110file, and the closer the output image will be to the original input. Normally 111you want to use the lowest quality setting (smallest file) that decompresses 112into something visually indistinguishable from the original image. For this 113purpose the quality setting should be between 50 and 95; the default of 75 is 114often about right. If you see defects at -quality 75, then go up 5 or 10 115counts at a time until you are happy with the output image. (The optimal 116setting will vary from one image to another.) 117 118-quality 100 will generate a quantization table of all 1's, minimizing loss 119in the quantization step (but there is still information loss in subsampling, 120as well as roundoff error). This setting is mainly of interest for 121experimental purposes. Quality values above about 95 are NOT recommended for 122normal use; the compressed file size goes up dramatically for hardly any gain 123in output image quality. 124 125In the other direction, quality values below 50 will produce very small files 126of low image quality. Settings around 5 to 10 might be useful in preparing an 127index of a large image library, for example. Try -quality 2 (or so) for some 128amusing Cubist effects. (Note: quality values below about 25 generate 2-byte 129quantization tables, which are considered optional in the JPEG standard. 130cjpeg emits a warning message when you give such a quality value, because some 131other JPEG programs may be unable to decode the resulting file. Use -baseline 132if you need to ensure compatibility at low quality values.) 133 134The -quality option has been extended in IJG version 7 for support of separate 135quality settings for luminance and chrominance (or in general, for every 136provided quantization table slot). This feature is useful for high-quality 137applications which cannot accept the damage of color data by coarse 138subsampling settings. You can now easily reduce the color data amount more 139smoothly with finer control without separate subsampling. The resulting file 140is fully compliant with standard JPEG decoders. 141Note that the -quality ratings refer to the quantization table slots, and that 142the last value is replicated if there are more q-table slots than parameters. 143The default q-table slots are 0 for luminance and 1 for chrominance with 144default tables as given in the JPEG standard. This is compatible with the old 145behaviour in case that only one parameter is given, which is then used for 146both luminance and chrominance (slots 0 and 1). More or custom quantization 147tables can be set with -qtables and assigned to components with -qslots 148parameter (see the "wizard" switches below). 149CAUTION: You must explicitly add -sample 1x1 for efficient separate color 150quality selection, since the default value used by library is 2x2! 151 152The -progressive switch creates a "progressive JPEG" file. In this type of 153JPEG file, the data is stored in multiple scans of increasing quality. If the 154file is being transmitted over a slow communications link, the decoder can use 155the first scan to display a low-quality image very quickly, and can then 156improve the display with each subsequent scan. The final image is exactly 157equivalent to a standard JPEG file of the same quality setting, and the total 158file size is about the same --- often a little smaller. 159 160Switches for advanced users: 161 162 -arithmetic Use arithmetic coding. 163 CAUTION: arithmetic coded JPEG is not yet widely 164 implemented, so many decoders will be unable to 165 view an arithmetic coded JPEG file at all. 166 167 -block N Set DCT block size. All N from 1 to 16 are possible. 168 Default is 8 (baseline format). 169 Larger values produce higher compression, 170 smaller values produce higher quality 171 (exact DCT stage possible with 1 or 2; with the 172 default quality of 75 and default Luminance qtable 173 the DCT+Quantization stage is lossless for N=1). 174 CAUTION: An implementation of the JPEG SmartScale 175 extension is required for this feature. SmartScale 176 enabled JPEG is not yet widely implemented, so many 177 decoders will be unable to view a SmartScale extended 178 JPEG file at all. 179 180 -rgb1 Create RGB JPEG file with reversible color transform. 181 Works like the -rgb switch (see above) and inserts a 182 simple reversible color transform into the processing 183 which significantly improves the compression. 184 Use this switch in combination with the -block N 185 switch (see above) for lossless JPEG coding. 186 CAUTION: A decoder with inverse color transform 187 support is required for this feature. Reversible 188 color transform support is not yet widely implemented, 189 so many decoders will be unable to view a reversible 190 color transformed JPEG file at all. 191 192 -bgycc Create big gamut YCC JPEG file. 193 In this type of encoding the color difference 194 components are quantized further by a factor of 2 195 compared to the normal Cb/Cr values, thus creating 196 space to allow larger color values with higher 197 saturation than the normal gamut limits to be encoded. 198 In order to compensate for the loss of color fidelity 199 compared to a normal YCC encoded file, the color 200 quantization tables can be adjusted accordingly. 201 For example, cjpeg -bgycc -quality 80,90 will give 202 similar results as cjpeg -quality 80. 203 CAUTION: For correct decompression a decoder with big 204 gamut YCC support (JFIF version 2) is required. 205 An old decoder may or may not display a big gamut YCC 206 encoded JPEG file, depending on JFIF version check 207 and corresponding warning/error configuration. 208 In case of a granted decompression the old decoder 209 will display the image with half saturated colors. 210 211 -dct int Use integer DCT method (default). 212 -dct fast Use fast integer DCT (less accurate). 213 -dct float Use floating-point DCT method. 214 The float method is very slightly more accurate than 215 the int method, but is much slower unless your machine 216 has very fast floating-point hardware. Also note that 217 results of the floating-point method may vary slightly 218 across machines, while the integer methods should give 219 the same results everywhere. The fast integer method 220 is much less accurate than the other two. 221 222 -nosmooth Don't use high-quality downsampling. 223 224 -restart N Emit a JPEG restart marker every N MCU rows, or every 225 N MCU blocks if "B" is attached to the number. 226 -restart 0 (the default) means no restart markers. 227 228 -smooth N Smooth the input image to eliminate dithering noise. 229 N, ranging from 1 to 100, indicates the strength of 230 smoothing. 0 (the default) means no smoothing. 231 232 -maxmemory N Set limit for amount of memory to use in processing 233 large images. Value is in thousands of bytes, or 234 millions of bytes if "M" is attached to the number. 235 For example, -max 4m selects 4000000 bytes. If more 236 space is needed, temporary files will be used. 237 238 -verbose Enable debug printout. More -v's give more printout. 239 or -debug Also, version information is printed at startup. 240 241The -restart option inserts extra markers that allow a JPEG decoder to 242resynchronize after a transmission error. Without restart markers, any damage 243to a compressed file will usually ruin the image from the point of the error 244to the end of the image; with restart markers, the damage is usually confined 245to the portion of the image up to the next restart marker. Of course, the 246restart markers occupy extra space. We recommend -restart 1 for images that 247will be transmitted across unreliable networks such as Usenet. 248 249The -smooth option filters the input to eliminate fine-scale noise. This is 250often useful when converting dithered images to JPEG: a moderate smoothing 251factor of 10 to 50 gets rid of dithering patterns in the input file, resulting 252in a smaller JPEG file and a better-looking image. Too large a smoothing 253factor will visibly blur the image, however. 254 255Switches for wizards: 256 257 -baseline Force baseline-compatible quantization tables to be 258 generated. This clamps quantization values to 8 bits 259 even at low quality settings. (This switch is poorly 260 named, since it does not ensure that the output is 261 actually baseline JPEG. For example, you can use 262 -baseline and -progressive together.) 263 264 -qtables file Use the quantization tables given in the specified 265 text file. 266 267 -qslots N[,...] Select which quantization table to use for each color 268 component. 269 270 -sample HxV[,...] Set JPEG sampling factors for each color component. 271 272 -scans file Use the scan script given in the specified text file. 273 274The "wizard" switches are intended for experimentation with JPEG. If you 275don't know what you are doing, DON'T USE THEM. These switches are documented 276further in the file wizard.txt. 277 278 279DJPEG DETAILS 280 281The basic command line switches for djpeg are: 282 283 -colors N Reduce image to at most N colors. This reduces the 284 or -quantize N number of colors used in the output image, so that it 285 can be displayed on a colormapped display or stored in 286 a colormapped file format. For example, if you have 287 an 8-bit display, you'd need to reduce to 256 or fewer 288 colors. (-colors is the recommended name, -quantize 289 is provided only for backwards compatibility.) 290 291 -fast Select recommended processing options for fast, low 292 quality output. (The default options are chosen for 293 highest quality output.) Currently, this is equivalent 294 to "-dct fast -nosmooth -onepass -dither ordered". 295 296 -grayscale Force grayscale output even if JPEG file is color. 297 Useful for viewing on monochrome displays; also, 298 djpeg runs noticeably faster in this mode. 299 300 -rgb Force RGB output even if JPEG file is grayscale. 301 This is provided to support applications that don't 302 want to cope with grayscale as a separate case. 303 304 -scale M/N Scale the output image by a factor M/N. Currently 305 supported scale factors are M/N with all M from 1 to 306 16, where N is the source DCT size, which is 8 for 307 baseline JPEG. If the /N part is omitted, then M 308 specifies the DCT scaled size to be applied on the 309 given input. For baseline JPEG this is equivalent to 310 M/8 scaling, since the source DCT size for baseline 311 JPEG is 8. Scaling is handy if the image is larger 312 than your screen; also, djpeg runs much faster when 313 scaling down the output. 314 315 -bmp Select BMP output format (Windows flavor). 8-bit 316 colormapped format is emitted if -colors or -grayscale 317 is specified, or if the JPEG file is grayscale; 318 otherwise, 24-bit full-color format is emitted. 319 320 -gif Select GIF output format. Since GIF does not support 321 more than 256 colors, -colors 256 is assumed (unless 322 you specify a smaller number of colors). If you 323 specify -fast, the default number of colors is 216. 324 325 -os2 Select BMP output format (OS/2 1.x flavor). 8-bit 326 colormapped format is emitted if -colors or -grayscale 327 is specified, or if the JPEG file is grayscale; 328 otherwise, 24-bit full-color format is emitted. 329 330 -pnm Select PBMPLUS (PPM/PGM) output format (this is the 331 default format). PGM is emitted if the JPEG file is 332 grayscale or if -grayscale is specified; otherwise 333 PPM is emitted. 334 335 -rle Select RLE output format. (Requires URT library.) 336 337 -targa Select Targa output format. Grayscale format is 338 emitted if the JPEG file is grayscale or if 339 -grayscale is specified; otherwise, colormapped format 340 is emitted if -colors is specified; otherwise, 24-bit 341 full-color format is emitted. 342 343Switches for advanced users: 344 345 -dct int Use integer DCT method (default). 346 -dct fast Use fast integer DCT (less accurate). 347 -dct float Use floating-point DCT method. 348 The float method is very slightly more accurate than 349 the int method, but is much slower unless your machine 350 has very fast floating-point hardware. Also note that 351 results of the floating-point method may vary slightly 352 across machines, while the integer methods should give 353 the same results everywhere. The fast integer method 354 is much less accurate than the other two. 355 356 -dither fs Use Floyd-Steinberg dithering in color quantization. 357 -dither ordered Use ordered dithering in color quantization. 358 -dither none Do not use dithering in color quantization. 359 By default, Floyd-Steinberg dithering is applied when 360 quantizing colors; this is slow but usually produces 361 the best results. Ordered dither is a compromise 362 between speed and quality; no dithering is fast but 363 usually looks awful. Note that these switches have 364 no effect unless color quantization is being done. 365 Ordered dither is only available in -onepass mode. 366 367 -map FILE Quantize to the colors used in the specified image 368 file. This is useful for producing multiple files 369 with identical color maps, or for forcing a predefined 370 set of colors to be used. The FILE must be a GIF 371 or PPM file. This option overrides -colors and 372 -onepass. 373 374 -nosmooth Don't use high-quality upsampling. 375 376 -onepass Use one-pass instead of two-pass color quantization. 377 The one-pass method is faster and needs less memory, 378 but it produces a lower-quality image. -onepass is 379 ignored unless you also say -colors N. Also, 380 the one-pass method is always used for grayscale 381 output (the two-pass method is no improvement then). 382 383 -maxmemory N Set limit for amount of memory to use in processing 384 large images. Value is in thousands of bytes, or 385 millions of bytes if "M" is attached to the number. 386 For example, -max 4m selects 4000000 bytes. If more 387 space is needed, temporary files will be used. 388 389 -verbose Enable debug printout. More -v's give more printout. 390 or -debug Also, version information is printed at startup. 391 392 393HINTS FOR CJPEG 394 395Color GIF files are not the ideal input for JPEG; JPEG is really intended for 396compressing full-color (24-bit) images. In particular, don't try to convert 397cartoons, line drawings, and other images that have only a few distinct 398colors. GIF works great on these, JPEG does not. If you want to convert a 399GIF to JPEG, you should experiment with cjpeg's -quality and -smooth options 400to get a satisfactory conversion. -smooth 10 or so is often helpful. 401 402Avoid running an image through a series of JPEG compression/decompression 403cycles. Image quality loss will accumulate; after ten or so cycles the image 404may be noticeably worse than it was after one cycle. It's best to use a 405lossless format while manipulating an image, then convert to JPEG format when 406you are ready to file the image away. 407 408The -optimize option to cjpeg is worth using when you are making a "final" 409version for posting or archiving. It's also a win when you are using low 410quality settings to make very small JPEG files; the percentage improvement 411is often a lot more than it is on larger files. (At present, -optimize 412mode is always selected when generating progressive JPEG files.) 413 414GIF input files are no longer supported, to avoid the Unisys LZW patent 415(now expired). 416(Conversion of GIF files to JPEG is usually a bad idea anyway.) 417 418 419HINTS FOR DJPEG 420 421To get a quick preview of an image, use the -grayscale and/or -scale switches. 422"-grayscale -scale 1/8" is the fastest case. 423 424Several options are available that trade off image quality to gain speed. 425"-fast" turns on the recommended settings. 426 427"-dct fast" and/or "-nosmooth" gain speed at a small sacrifice in quality. 428When producing a color-quantized image, "-onepass -dither ordered" is fast but 429much lower quality than the default behavior. "-dither none" may give 430acceptable results in two-pass mode, but is seldom tolerable in one-pass mode. 431 432If you are fortunate enough to have very fast floating point hardware, 433"-dct float" may be even faster than "-dct fast". But on most machines 434"-dct float" is slower than "-dct int"; in this case it is not worth using, 435because its theoretical accuracy advantage is too small to be significant 436in practice. 437 438Two-pass color quantization requires a good deal of memory; on MS-DOS machines 439it may run out of memory even with -maxmemory 0. In that case you can still 440decompress, with some loss of image quality, by specifying -onepass for 441one-pass quantization. 442 443To avoid the Unisys LZW patent (now expired), djpeg produces uncompressed GIF 444files. These are larger than they should be, but are readable by standard GIF 445decoders. 446 447 448HINTS FOR BOTH PROGRAMS 449 450If more space is needed than will fit in the available main memory (as 451determined by -maxmemory), temporary files will be used. (MS-DOS versions 452will try to get extended or expanded memory first.) The temporary files are 453often rather large: in typical cases they occupy three bytes per pixel, for 454example 3*800*600 = 1.44Mb for an 800x600 image. If you don't have enough 455free disk space, leave out -progressive and -optimize (for cjpeg) or specify 456-onepass (for djpeg). 457 458On MS-DOS, the temporary files are created in the directory named by the TMP 459or TEMP environment variable, or in the current directory if neither of those 460exist. Amiga implementations put the temp files in the directory named by 461JPEGTMP:, so be sure to assign JPEGTMP: to a disk partition with adequate free 462space. 463 464The default memory usage limit (-maxmemory) is set when the software is 465compiled. If you get an "insufficient memory" error, try specifying a smaller 466-maxmemory value, even -maxmemory 0 to use the absolute minimum space. You 467may want to recompile with a smaller default value if this happens often. 468 469On machines that have "environment" variables, you can define the environment 470variable JPEGMEM to set the default memory limit. The value is specified as 471described for the -maxmemory switch. JPEGMEM overrides the default value 472specified when the program was compiled, and itself is overridden by an 473explicit -maxmemory switch. 474 475On MS-DOS machines, -maxmemory is the amount of main (conventional) memory to 476use. (Extended or expanded memory is also used if available.) Most 477DOS-specific versions of this software do their own memory space estimation 478and do not need you to specify -maxmemory. 479 480 481JPEGTRAN 482 483jpegtran performs various useful transformations of JPEG files. 484It can translate the coded representation from one variant of JPEG to another, 485for example from baseline JPEG to progressive JPEG or vice versa. It can also 486perform some rearrangements of the image data, for example turning an image 487from landscape to portrait format by rotation. For EXIF files and JPEG files 488containing Exif data, you may prefer to use exiftran instead. 489 490jpegtran works by rearranging the compressed data (DCT coefficients), without 491ever fully decoding the image. Therefore, its transformations are lossless: 492there is no image degradation at all, which would not be true if you used 493djpeg followed by cjpeg to accomplish the same conversion. But by the same 494token, jpegtran cannot perform lossy operations such as changing the image 495quality. However, while the image data is losslessly transformed, metadata 496can be removed. See the -copy option for specifics. 497 498jpegtran uses a command line syntax similar to cjpeg or djpeg. 499On Unix-like systems, you say: 500 jpegtran [switches] [inputfile] >outputfile 501On most non-Unix systems, you say: 502 jpegtran [switches] inputfile outputfile 503where both the input and output files are JPEG files. 504 505To specify the coded JPEG representation used in the output file, 506jpegtran accepts a subset of the switches recognized by cjpeg: 507 -optimize Perform optimization of entropy encoding parameters. 508 -progressive Create progressive JPEG file. 509 -arithmetic Use arithmetic coding. 510 -restart N Emit a JPEG restart marker every N MCU rows, or every 511 N MCU blocks if "B" is attached to the number. 512 -scans file Use the scan script given in the specified text file. 513See the previous discussion of cjpeg for more details about these switches. 514If you specify none of these switches, you get a plain baseline-JPEG output 515file. The quality setting and so forth are determined by the input file. 516 517The image can be losslessly transformed by giving one of these switches: 518 -flip horizontal Mirror image horizontally (left-right). 519 -flip vertical Mirror image vertically (top-bottom). 520 -rotate 90 Rotate image 90 degrees clockwise. 521 -rotate 180 Rotate image 180 degrees. 522 -rotate 270 Rotate image 270 degrees clockwise (or 90 ccw). 523 -transpose Transpose image (across UL-to-LR axis). 524 -transverse Transverse transpose (across UR-to-LL axis). 525 526The transpose transformation has no restrictions regarding image dimensions. 527The other transformations operate rather oddly if the image dimensions are not 528a multiple of the iMCU size (usually 8 or 16 pixels), because they can only 529transform complete blocks of DCT coefficient data in the desired way. 530 531jpegtran's default behavior when transforming an odd-size image is designed 532to preserve exact reversibility and mathematical consistency of the 533transformation set. As stated, transpose is able to flip the entire image 534area. Horizontal mirroring leaves any partial iMCU column at the right edge 535untouched, but is able to flip all rows of the image. Similarly, vertical 536mirroring leaves any partial iMCU row at the bottom edge untouched, but is 537able to flip all columns. The other transforms can be built up as sequences 538of transpose and flip operations; for consistency, their actions on edge 539pixels are defined to be the same as the end result of the corresponding 540transpose-and-flip sequence. 541 542For practical use, you may prefer to discard any untransformable edge pixels 543rather than having a strange-looking strip along the right and/or bottom edges 544of a transformed image. To do this, add the -trim switch: 545 -trim Drop non-transformable edge blocks. 546Obviously, a transformation with -trim is not reversible, so strictly speaking 547jpegtran with this switch is not lossless. Also, the expected mathematical 548equivalences between the transformations no longer hold. For example, 549"-rot 270 -trim" trims only the bottom edge, but "-rot 90 -trim" followed by 550"-rot 180 -trim" trims both edges. 551 552If you are only interested in perfect transformation, add the -perfect switch: 553 -perfect Fails with an error if the transformation is not 554 perfect. 555For example you may want to do 556 jpegtran -rot 90 -perfect foo.jpg || djpeg foo.jpg | pnmflip -r90 | cjpeg 557to do a perfect rotation if available or an approximated one if not. 558 559We also offer a lossless-crop option, which discards data outside a given 560image region but losslessly preserves what is inside. Like the rotate and 561flip transforms, lossless crop is restricted by the current JPEG format: the 562upper left corner of the selected region must fall on an iMCU boundary. If 563this does not hold for the given crop parameters, we silently move the upper 564left corner up and/or left to make it so, simultaneously increasing the 565region dimensions to keep the lower right crop corner unchanged. (Thus, the 566output image covers at least the requested region, but may cover more.) 567The adjustment of the region dimensions may be optionally disabled by 568attaching an 'f' character ("force") to the width or height number. 569 570The image can be losslessly cropped by giving the switch: 571 -crop WxH+X+Y Crop to a rectangular subarea of width W, height H 572 starting at point X,Y. 573 574A complementary lossless-wipe option is provided to discard (gray out) data 575inside a given image region while losslessly preserving what is outside: 576 -wipe WxH+X+Y Wipe (gray out) a rectangular subarea of 577 width W, height H starting at point X,Y. 578 579Other not-strictly-lossless transformation switches are: 580 581 -grayscale Force grayscale output. 582This option discards the chrominance channels if the input image is YCbCr 583(ie, a standard color JPEG), resulting in a grayscale JPEG file. The 584luminance channel is preserved exactly, so this is a better method of reducing 585to grayscale than decompression, conversion, and recompression. This switch 586is particularly handy for fixing a monochrome picture that was mistakenly 587encoded as a color JPEG. (In such a case, the space savings from getting rid 588of the near-empty chroma channels won't be large; but the decoding time for 589a grayscale JPEG is substantially less than that for a color JPEG.) 590 591 -scale M/N Scale the output image by a factor M/N. 592Currently supported scale factors are M/N with all M from 1 to 16, where N is 593the source DCT size, which is 8 for baseline JPEG. If the /N part is omitted, 594then M specifies the DCT scaled size to be applied on the given input. For 595baseline JPEG this is equivalent to M/8 scaling, since the source DCT size 596for baseline JPEG is 8. CAUTION: An implementation of the JPEG SmartScale 597extension is required for this feature. SmartScale enabled JPEG is not yet 598widely implemented, so many decoders will be unable to view a SmartScale 599extended JPEG file at all. 600 601jpegtran also recognizes these switches that control what to do with "extra" 602markers, such as comment blocks: 603 -copy none Copy no extra markers from source file. 604 This setting suppresses all comments 605 and other metadata in the source file. 606 -copy comments Copy only comment markers. 607 This setting copies comments from the source file, 608 but discards any other metadata. 609 -copy all Copy all extra markers. This setting preserves 610 metadata found in the source file, such as JFIF 611 thumbnails, Exif data, and Photoshop settings. 612 In some files these extra markers can be sizable. 613 Note that this option will copy thumbnails as-is; 614 they will not be transformed. 615The default behavior is -copy comments. (Note: in IJG releases v6 and v6a, 616jpegtran always did the equivalent of -copy none.) 617 618Additional switches recognized by jpegtran are: 619 -outfile filename 620 -maxmemory N 621 -verbose 622 -debug 623These work the same as in cjpeg or djpeg. 624 625 626THE COMMENT UTILITIES 627 628The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. 629Although the standard doesn't actually define what COM blocks are for, they 630are widely used to hold user-supplied text strings. This lets you add 631annotations, titles, index terms, etc to your JPEG files, and later retrieve 632them as text. COM blocks do not interfere with the image stored in the JPEG 633file. The maximum size of a COM block is 64K, but you can have as many of 634them as you like in one JPEG file. 635 636We provide two utility programs to display COM block contents and add COM 637blocks to a JPEG file. 638 639rdjpgcom searches a JPEG file and prints the contents of any COM blocks on 640standard output. The command line syntax is 641 rdjpgcom [-raw] [-verbose] [inputfilename] 642The switch "-raw" (or just "-r") causes rdjpgcom to also output non-printable 643characters in comments, which are normally escaped for security reasons. 644The switch "-verbose" (or just "-v") causes rdjpgcom to also display the JPEG 645image dimensions. If you omit the input file name from the command line, 646the JPEG file is read from standard input. (This may not work on some 647operating systems, if binary data can't be read from stdin.) 648 649wrjpgcom adds a COM block, containing text you provide, to a JPEG file. 650Ordinarily, the COM block is added after any existing COM blocks, but you 651can delete the old COM blocks if you wish. wrjpgcom produces a new JPEG 652file; it does not modify the input file. DO NOT try to overwrite the input 653file by directing wrjpgcom's output back into it; on most systems this will 654just destroy your file. 655 656The command line syntax for wrjpgcom is similar to cjpeg's. On Unix-like 657systems, it is 658 wrjpgcom [switches] [inputfilename] 659The output file is written to standard output. The input file comes from 660the named file, or from standard input if no input file is named. 661 662On most non-Unix systems, the syntax is 663 wrjpgcom [switches] inputfilename outputfilename 664where both input and output file names must be given explicitly. 665 666wrjpgcom understands three switches: 667 -replace Delete any existing COM blocks from the file. 668 -comment "Comment text" Supply new COM text on command line. 669 -cfile name Read text for new COM block from named file. 670(Switch names can be abbreviated.) If you have only one line of comment text 671to add, you can provide it on the command line with -comment. The comment 672text must be surrounded with quotes so that it is treated as a single 673argument. Longer comments can be read from a text file. 674 675If you give neither -comment nor -cfile, then wrjpgcom will read the comment 676text from standard input. (In this case an input image file name MUST be 677supplied, so that the source JPEG file comes from somewhere else.) You can 678enter multiple lines, up to 64KB worth. Type an end-of-file indicator 679(usually control-D or control-Z) to terminate the comment text entry. 680 681wrjpgcom will not add a COM block if the provided comment string is empty. 682Therefore -replace -comment "" can be used to delete all COM blocks from a 683file. 684 685These utility programs do not depend on the IJG JPEG library. In 686particular, the source code for rdjpgcom is intended as an illustration of 687the minimum amount of code required to parse a JPEG file header correctly. 688