jpegtran(1) User Commands jpegtran(1)
jpegtran - lossless transformation of JPEG files
jpegtran [options] [filename]
jpegtran performs various useful transformations of JPEG files. jpegtran can translate the
coded representation from one variant of JPEG to another, for example from baseline JPEG
to progressive JPEG or vice versa. jpegtran can also perform some rearrangements of the
image data, for example turning an image from landscape to portrait format by rotation.
jpegtran works by rearranging the compressed data (DCT coefficients), without ever fully
decoding the image. Therefore, jpegtran transformations are lossless: there is no image
degradation at all, which would not be true if you used djpeg followed by cjpeg to accom-
plish the same conversion. However, jpegtran cannot perform lossy operations such as
changing the image quality.
jpegtran reads the named JPEG/JFIF file, or the standard input if no file is named, and
produces a JPEG/JFIF file on the standard output.
All options may be abbreviated. For example, -optimize may be written -opt or -o. Upper
and lower case are equivalent. British spellings are also accepted. For example, -opti-
The following options are supported:
-copy all Copy all extra markers. This option preserves miscellaneous mark-
ers found in the source file, such as JFIF thumbnails and source-
application settings. In some files, these extra markers can be
-copy comments Copy only comment markers. This option copies comments from the
source file, but discards any other inessential data. This is the
-copy none Copy no extra markers from the source file. This option suppresses
all comments and other excess information present in the source
-flip horizontal Create a mirror image horizontally, that is, from left to right.
This is a lossless transformation.
-flip vertical Create a mirror image vertically, that is, from top to bottom.
This is a lossless transformation.
-grayscale Force grayscale output. This is not a lossless transformation. For
more information about the -grayscale option, see the Extended
-maxmemory N Set the limit for the amount of memory to use in processing large
images. N is specified in thousands of bytes, or in millions of
bytes if "M" is specified with the number. For example, -max 4m
selects 4000000 bytes. If more space is needed, temporary files
-optimize Optimize the entropy encoding parameters. For more information
about the -optimize option, see cjpeg(1).
-outfile name Send the output image to the named file, instead of to the stan-
-progressive Create a progressive JPEG file. For more information about the
-progressive option, see cjpeg(1).
-restart N Emit a JPEG restart marker every N MCU rows, or every N MCU blocks
if "B" is specified with the number. For more information about
the -restart option, see cjpeg(1).
-rotate 90 Rotate the image 90 degrees clockwise. This is a lossless trans-
-rotate 180 Rotate the image 180 degrees clockwise. This is a lossless trans-
-rotate 270 Rotate the image 270 degrees clockwise, or 90 degrees anticlock-
wise. This is a lossless transformation.
-scans file Use the scan script provided in the specified text file.
-transpose Transpose the image, that is, across the UL-to-LR axis. This is a
lossless transformation. For more information about the -trans-
pose option, see the Extended Description section.
-transverse Transverse transpose the image, that is, across the UR-to-LL axis.
This is a lossless transformation.
-trim Drop non-transformable edge blocks. This is not a lossless trans-
formation. For more information about the -trim option, see the
Extended Description section.
-verbose Display version information at startup, and enable debug printout.
The -vv option displays more verbose output than the -v option.
The -vvv option displays the most verbose output.
You can also use -debug to specify this option.
The following operands are supported:
filename The name of the JPEG file to be transformed.
If you do not specify one of the following options, you get a plain baseline-JPEG output
file: -optimize, -progressive, -restart N, -scans file. In such cases, the quality setting
and other settings are determined by the input file.
The transpose transformation has no restrictions as regards image dimensions. The other
transformations operate rather oddly if the image dimensions are not a multiple of the
iMCU siz, usually 8 or 16 pixels, because they can only transform complete blocks of DCT
coefficient data in the desired way. The default behavior when transforming an odd-size
image is designed to preserve exact reversibility and mathematical consistency of the
As stated, transpose can flip the entire image area. Horizontal mirroring leaves any par-
tial iMCU column at the right edge untouched, but is able to flip all rows of the image.
Similarly, vertical mirroring leaves any partial iMCU row at the bottom edge untouched,
but is able to flip all columns.
The other transforms can be built up as sequences of transpose and flip operations. For
consistency, their actions on edge pixels are defined to be the same as the end result of
the corresponding transpose-and-flip sequence.
You may prefer to discard any untransformable edge pixels rather than have a strange-look-
ing strip along the right or bottom edges of a transformed image. To do this, use the
-trim option. Obviously, a transformation with -trim is not reversible, so strictly speak-
ing jpegtran with this option is not lossless. Also, the expected mathematical equiva-
lences between the transformations no longer hold. For example, -rot 270 -trim trims only
the bottom edge, but -rot 90 -trim followed by -rot 180 -trim trims both edges.
Another not-strictly-lossless transformation option is -grayscale. This option discards
the chrominance channels if the input image is YCbCr (that is, a standard color JPEG),
which results in a grayscale JPEG file. The luminance channel is preserved exactly, so
this is a better method of reducing to grayscale than decompression, conversion, and
recompression. The -grayscale option is particularly useful for fixing a monochrome pic-
ture that was mistakenly encoded as a color JPEG. In such a case, the space saved by dis-
carding the near-empty chrominance channels is not large, but the decoding time for a
grayscale JPEG is substantially less than that for a color JPEG.
Example 1: Converting a Baseline JPEG File to Progressive Form
example% jpegtran -progressive test.jpg > testprog.jpg
Example 2: Rotating an Image 90 Degrees Clockwise, Discarding Any Unrotatable Edge Pixels
example% jpegtran rot 90 -trim test.jpg > test90.jpg
jpegtran uses the following environment variables:
JPEGMEM The value of this environment variable, if set, is the default
memory limit. The value is specified as described for the -maxmem-
ory option. JPEGMEM overrides the default value specified when the
program was compiled, and is in turn overridden by an explicit
See attributes(5) for descriptions of the following attributes:
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|Availability |SUNWjpg |
|Interface stability |Uncommitted |
Wallace, Gregory K., The JPEG Still Picture Compression Standard Communications of the
ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
cjpeg(1), djpeg(1), rdjpgcom(1), wrjpgcom(1)
Arithmetic coding is not supported.
The entire image is read into memory and then written out again, even in cases where this
is not really necessary. Expect swapping on large images, especially when using the more
complex transform options.
This man page was originally written by the Independent JPEG Group. Updated by Breda
McColgan, Sun Microsystems Inc., 2004.
SunOS 5.11 26 Mar 2004 jpegtran(1)