jpegtran

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
JPEGTRAN(1)							  JPEGTRAN(1)



NAME
       jpegtran - lossless transformation of JPEG files

SYNOPSIS
       jpegtran [ options ] [ filename ]


DESCRIPTION
       jpegtran	 performs  various  useful transformations of JPEG files.  It
       can translate the coded representation from one	variant	 of  JPEG  to
       another,	 for  example  from baseline JPEG to progressive JPEG or vice
       versa.  It can also perform some rearrangements of the image data, for
       example	turning	 an  image from landscape to portrait format by rota-
       tion.

       jpegtran works by rearranging the compressed data (DCT  coefficients),
       without ever fully decoding the image.  Therefore, its transformations
       are lossless: there is no image degradation at all, which would not be
       true  if	 you used djpeg followed by cjpeg to accomplish the same con-
       version.	 But by the same token, jpegtran cannot perform lossy  opera-
       tions 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.

OPTIONS
       All switch names may be abbreviated; for	 example,  -optimize  may  be
       written	-opt  or  -o.	Upper and lower case are equivalent.  British
       spellings are also accepted  (e.g.,  -optimise),	 though	 for  brevity
       these are not mentioned below.

       To  specify  the	 coded	JPEG  representation used in the output file,
       jpegtran accepts a subset of the switches recognized by cjpeg:

       -optimize
	      Perform optimization of entropy encoding parameters.

       -progressive
	      Create progressive JPEG file.

       -restart N
	      Emit a JPEG restart marker every N MCU rows,  or	every  N  MCU
	      blocks if "B" is attached to the number.

       -scans file
	      Use the scan script given in the specified text file.

       See  cjpeg(1)  for  more details about these switches.  If you specify
       none of these switches, you get a  plain	 baseline-JPEG	output	file.
       The quality setting and so forth are determined by the input file.

       The  image  can	be  losslessly	transformed  by	 giving	 one of these
       switches:

       -flip horizontal
	      Mirror image horizontally (left-right).

       -flip vertical
	      Mirror image vertically (top-bottom).

       -rotate 90
	      Rotate image 90 degrees clockwise.

       -rotate 180
	      Rotate image 180 degrees.

       -rotate 270
	      Rotate image 270 degrees clockwise (or 90 ccw).

       -transpose
	      Transpose image (across UL-to-LR axis).

       -transverse
	      Transverse transpose (across UR-to-LL axis).

       The transpose  transformation  has  no  restrictions  regarding	image
       dimensions.   The  other	 transformations  operate rather oddly if the
       image dimensions are not a multiple of the iMCU size (usually 8 or  16
       pixels),	 because they can only transform complete blocks of DCT coef-
       ficient data in the desired way.

       jpegtran’s default behavior when transforming  an  odd-size  image  is
       designed	 to preserve exact reversibility and mathematical consistency
       of the transformation set.  As stated, transpose is able to  flip  the
       entire  image area.  Horizontal mirroring leaves any partial iMCU col-
       umn 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 opera-
       tions; for consistency, their actions on edge pixels are defined to be
       the  same  as  the  end result of the corresponding transpose-and-flip
       sequence.

       For practical use, you may prefer to discard any untransformable	 edge
       pixels  rather  than  having  a	strange-looking strip along the right
       and/or bottom edges of a transformed image.  To do this, add the -trim
       switch:

       -trim  Drop non-transformable edge blocks.

       Obviously,  a transformation with -trim is not reversible, so strictly
       speaking jpegtran  with	this  switch  is  not  lossless.   Also,  the
       expected	 mathematical  equivalences  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 switch is:

       -grayscale
	      Force grayscale output.

       This  option  discards  the chrominance channels if the input image is
       YCbCr (ie, a standard color JPEG), resulting 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  recom-
       pression.   This	 switch is particularly handy for fixing a monochrome
       picture that was mistakenly encoded as a color JPEG.  (In such a case,
       the  space  savings from getting rid of the near-empty chroma channels
       won’t be large; but the decoding time for a grayscale JPEG is substan-
       tially less than that for a color JPEG.)

       jpegtran	 also  recognizes these switches that control what to do with
       "extra" markers, such as comment blocks:

       -copy none
	      Copy no extra markers from  source  file.	  This	setting	 sup-
	      presses  all  comments  and other excess baggage present in the
	      source file.

       -copy comments
	      Copy only comment markers.  This setting copies  comments	 from
	      the source file, but discards any other inessential data.

       -copy all
	      Copy  all	 extra markers.	 This setting preserves miscellaneous
	      markers found in the source file, such as JFIF  thumbnails  and
	      Photoshop	 settings.   In some files these extra markers can be
	      sizable.

       The default behavior is -copy comments.	(Note: in IJG releases v6 and
       v6a, jpegtran always did the equivalent of -copy none.)

       Additional switches recognized by jpegtran are:

       -maxmemory N
	      Set  limit  for  amount  of  memory  to use in processing large
	      images.  Value is in thousands of bytes, or millions  of	bytes
	      if "M" is attached to the number.	 For example, -max 4m selects
	      4000000 bytes.  If more space is needed, temporary  files	 will
	      be used.

       -outfile name
	      Send output image to the named file, not to standard output.

       -verbose
	      Enable debug printout.  More -v’s give more output.  Also, ver-
	      sion information is printed at startup.

       -debug Same as -verbose.

EXAMPLES
       This example converts a baseline JPEG file to progressive form:

	      jpegtran -progressive foo.jpg > fooprog.jpg

       This example rotates an image 90	 degrees  clockwise,  discarding  any
       unrotatable edge pixels:

	      jpegtran -rot 90 -trim foo.jpg > foo90.jpg

ENVIRONMENT
       JPEGMEM
	      If  this	environment variable is set, its value is the default
	      memory limit.  The value is  specified  as  described  for  the
	      -maxmemory  switch.  JPEGMEM overrides the default value speci-
	      fied when the program was compiled, and itself is overridden by
	      an explicit -maxmemory.

SEE ALSO
       cjpeg(1), djpeg(1), rdjpgcom(1), wrjpgcom(1)
       Wallace,	 Gregory  K.   "The JPEG Still Picture Compression Standard",
       Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.

AUTHOR
       Independent JPEG Group

BUGS
       Arithmetic coding is not supported for legal reasons.

       The transform options can’t transform odd-size images perfectly.	  Use
       -trim if you don’t like the results without it.

       The  entire image is read into memory and then written out again, even
       in cases where this isn’t really necessary.  Expect swapping on	large
       images, especially when using the more complex transform options.



				3 August 1997			  JPEGTRAN(1)