Man Linux: Main Page and Category List

NAME

       pngcrush  —  optimizes  (or  modifies)  PNG (Portable Network Graphics)
       files.

SYNOPSIS

       pngcrush [options]  [infile.png]  [outfile.png]

       pngcrush -e ext [options]  [file1.png]  [file2.png] ...

       pngcrush -d dir [options]  [file1.png]  [file2.png] ...

DESCRIPTION

       pngcrush is an optimizer for PNG  (Portable  Network  Graphics)  files.
       Its  main  purpose  is  to reduce the size of the file’s IDAT chunk (or
       stream).  pngcrush can also be used to modify a PNG’s ancillary  chunks
       (example:   transparency   information   or   textual  comments).  Some
       familiarity with the PNG (pronounced ’ping’) format may be  helpful  to
       users  of pngcrush. pngcrush has reasonable defaults so running with no
       options may produce smaller files.  This document briefly describes the
       PNG  format  where  necessary  to  understand  pngcrush.   For complete
       documentation, see :

                 http://www.libpng.org/pub/png/.

       The actual pixel data of a PNG is contained in one or many IDAT chunks.
       To  make  an IDAT chunk PNG encoders take the raw pixel data, filter it
       with one of 5 different filters (See  Section  "Filter  Types"  )  then
       compress  it.   pngcrush  reduces  the  size of PNG files by choosing a
       different filter or compression methods from those used  in  the  input
       file.   pngcrush tries multiple filter/compression methods and compares
       the size of the resulting IDAT chunk.   The  filter/compression  method
       with the smallest IDAT chunk is chosen for the output file.  The filter
       and compression levels pngcrush tries are controlled  by  command  line
       options.   All  of  the  filter  methods  and  compression  levels  are
       lossless; they will not reduce image quality.

       In addition to reducing the size of a PNG  file,  pngcrush  can  modify
       ancillary chunks.   Ancillary chunks are optional information including
       transparency  (tRNS),  gamma  (gAMMA),   standard   RGB   color   space
       conformance  (sRGB)  or  textual information (iTXt, tEXt or zTXt).  See
       the associated command line options for details on  manipulating  these
       chunks.

OPTIONS

       -already size
                 If  file  has an IDAT chunk greater than the integer size, it
                 will be considered to be already  crushed  and  will  not  be
                 processed further.

       -bit_depth n
                 Force  output  bit  depth to n. See Section "Color Types" for
                 bit depth restrictions.

       -bkgd r g b
                 Specify the default background color for the image.  Some PNG
                 viewers  will  use this background when displaying the image.
                 Background is specified by r, g and b integers between 0  and
                 (2^bitdepth)-1.  For  output  color  type  0 and 4 (gray, see
                 section "Color Types" ) the green index is used as  the  gray
                 level of the background.

       -brute    Use brute force, try 114 different filter/compression methods
                 [11-124]. This option is very  time-consuming  and  generally
                 not  worthwhile.  You  can  restrict  this  option to certain
                 filter types, compression levels, or strategies by  following
                 it with -f filter,  -l level, or -z strategy. For example:

                           pngcrush -brute -f 0 infile.png

                 Will try only methods that use filter type 0.

       -c type   Set  the output image color type to type, one of [0, 2, 4, or
                 6] (see section "Color Types" ).  Future versions of pngcrush
                 will  also  allow  color  type  3,  if there are 256 or fewer
                 colors present in the input file.  Color types 4  and  6  are
                 padded  with  an  opaque alpha channel if the input file does
                 not have alpha information. You can use 0  or  4  to  convert
                 color  to  grayscale.  Use 0 or 2 to delete an unwanted alpha
                 channel. Default is to use same color type as the input file.

       -d dir    Specify  a  directory  for all output files. All output files
                 will have the same name as their respective input files.

       -dou      Double the images gamma.  This is used for  fixing  gamma  in
                 PhotoShop  5.0c5.02  files.  It has been claimed that the PS5
                 bug is actually more complex than that, in  some  unspecified
                 way.

       -e ext    Specify a new extension ext for all output files.

       -exit     Forces  pngcrush  to call exit() rather than return() when it
                 is finished. It is unclear to this  writer  why  this  option
                 exists.

       -f filter Specify  filter (see section "Filter Types" ) to use with the
                 method specified in the preceding -m or -brute option.  Valid
                 filter  types  are  [0-4]  :  use  specified filter, [5]: use
                 adaptive filtering.

       -fix      Fix otherwise fatal conditions such  as  bad  CRCs.  The  CRC
                 (Cyclic  Redundancy  Check) is present in every chunk and can
                 alert the decoder of corrupt data.

       -force    Write a new output file even if larger than input.  Otherwise
                 the input file will be copied to output if it is smaller than
                 any generated file  and  no  chunk  additions,  removals,  or
                 changes were requested.

       -g gamma  Value  to insert in gAMA chunk, only if the input file has no
                 gAMA chunk.  To replace  an  existing  gAMA  chunk,  use  the
                 -replace_gamma option.  Some decoders will use the gAMA chunk
                 to more accurately  display  the  image.  gamma  relates  the
                 output   intensity  to  the  input  samples  (input_sample  =
                 light_out GAMMA).  gamma can be any integer between 0  and  2
                 32  and  is  interpreted as GAMMA*100000. For example, if you
                 wanted a GAMMA of 1/2.2, you would enter 45455 for gamma.

       -h        Display help and legal notices.

       -itxt b|a keyword text
                 Insert an (uncompressed) iTXt chunk.  b|a  indicates  whether
                 chunk should be inserted before or after the IDAT chunk, (see
                 Section "Text Chunks" ).

       -keep chunk_name
                 keep named  chunk  chunk_name  even  if  the  PNG  datastream
                 becomes  invalid.  Currently  only  dSIG  is recognized as an
                 acceptable value.

       -l level  zlib compression level to use on the filtered IDAT chunk with
                 the  method  specified  by the preceding -m or -brute option.
                 zlib compression levels are integers between 0 and 9.  0 = no
                 compression,   1   =   fastest  compression,  and  9  =  best
                 compression.

       -loco     Make the file more compressible  by  performing  a  lossless,
                 reversible, color transformation. The resulting file is a MNG
                 format file, not a PNG, and should be  given  the  .mng  file
                 extension.  The  loco  option  has  no effect on grayscale or
                 indexed-color PNG files.

       -m method pngcrush method [0-200] to try (0 means try all of 1-10). Can
                 be  repeated  as in -m 1 -m 4 -m 7. This can be useful if you
                 run out of memory when pngcrush tries methods 2, 3, 5, 6,  8,
                 9,  or  10  which  use  filtering  and  are memory intensive.
                 Method 1, 4, and 7 use no filtering; methods 11  and  up  use
                 specified filter, compression level, and strategy.

       -max maximum_IDAT_size
                 Set  the  maximum  idat  size  to  be  used when creating the
                 compression buffer.[1 through 524288]

       -mng      write a new MNG, do not crush embedded PNGs.

       -n        Do not do compression or write output file. This is useful in
                 conjunction with the -v option to get info, or to test decode
                 speed.

       -p        This option tells pngcrush to pause and wait for [enter]  key
                 whenever the screen fills.

       -plte_len n
                 Truncates  the  PLTE.  The  PLTE chunk contains from 1 to 256
                 palette entries. Be sure not to truncate it to less than  the
                 greatest index present in IDAT.

       -q        quiet, the opposite of verbose.

       -rem chunkname
                 Name of an ancillary chunk or optional PLTE to be removed. Be
                 careful with this.  Please don’t use this feature  to  remove
                 transparency,    gamma,    copyright,   or   other   valuable
                 information.  To remove  several  different  chunks,  repeat:
                 -rem  tEXt -rem pHYs.  Known chunks (those in the PNG spec or
                 extensions  document)  can  be  named  with  all   lower-case
                 letters,  so -rem bkgd is equivalent to -rem bKGD.  But note:
                 -rem text removes all forms of text  chunks;  Exact  case  is
                 required  to  remove  unknown  chunks.   To do surgery with a
                 chain-saw, -rem  alla  removes  all  known  ancillary  chunks
                 except for tRNS, and -rem allb removes all but tRNS and gAMA.

       -replace_gamma gamma
                 Force a specified gamma in the output file even  if  gAMA  is
                 present in the input. See the -g for more information.

       -res dpi  Write  a pHYs chunk with a resolution of dpi.  The pHYs chunk
                 indicates the desired pixel size.

       -save     Force writing of unknown chunks.   If  the  input  image  has
                 chunks  that  are  not  part  of  the PNG specification, they
                 should not be discarded.

       -srgb n   Set value of rendering intent for sRGB chunk to n where n  is
                 between  0 and 3. The appropriate rendering intent depends on
                 how the image will be used:

                           0 - Perceptual: when good adaptation to the  output
                           device   gamut   at  the  expense  of  colorimetric
                           accuracy is desired, example: photographs.

                           1 - Relative colorimetric: images  requiring  color
                           appearance  matching (relative to the output device
                           white point), example: logos.

                           2: Saturation: preservation of  saturation  at  the
                           expense of hue and lightness is preferred, example:
                           charts and graphs.

                           3:   Absolute   colorimetric:   images    requiring
                           preservation   of  absolute  colorimetry,  example:
                           proofs (previews of images destined for a different
                           output device).

       -text [b|a] keyword text
                 Insert  a tEXt chunk. [b|a] indicates whether chunk should be
                 inserted before or after the IDAT chunk, (see  Section  "Text
                 Chunks" ).

       -newtimestamp
                 Reset file modification time to newer time stamp. This is the
                 default.

       -oldtimestamp
                 Retain input file modification time  stamp.  The  default  is
                 -newtimestamp which is the opposite of this option.

       -trns index red green blue gray
                 Insert a tRNS (transparency) chunk, if no tRNS chunk found in
                 file.  You must give all five parameters  regardless  of  the
                 color  type,  scaled  to  the  output  bit depth. See the PNG
                 documentation for details.

       -trns_array n trns[0] trns[1] ... trns[n-1]
                 Insert a tRNS (transparency) chunk, if no tRNS chunk found in
                 file. See the PNG documentation for details.

       -v        Display more detailed information. Repeat the option (use "-v
                 -v") for even more.

       -w size   Specify size in kbytes (or bytes in the case of 512)  of  the
                 sliding  compression  window where size is one of [32, 16, 8,
                 4, 2, 1, or 512]. It’s best to use the  default  (32)  unless
                 you run out of memory.  The program will use a smaller window
                 anyway when the uncompressed file is smaller than 16k.

       -z strategy
                 Specify the zlib compression strategy [0, 1, or 2] to be used
                 on  the  filtered  IDAT chunk for the method of the preceding
                 -m.   The  zlib  strategy  parameter  tunes  the  compression
                 algorithm and is one of:

                    ·  0  :  default, most compression is aimed towards string
                       matching

                    ·  1 : some string matching, some Huffman coding

                    ·  2 : use only Huffman coding

       -zitxt [b|a] keyword text
                 Insert a zTXt chunk. [b|a] indicates whether chunk should  be
                 inserted  before  or after the IDAT chunk, (see Section "Text
                 Chunks" ).

       -ztxt [b|a] keyword text
                 zTXt chunk to insert (see -text).

Color Types

       The PNG specification provides for five color types.   The  color  type
       determines  how  the  IDAT  chunk  will  be interpreted by the decoder.
       Choosing a color type appropriate for the color information in an image
       can  in  principle reduce the size. However, certain combinations of -c
       and -bit_depth require color counting which is currently  disabled.  In
       such  cases  no  reduction will take place. Following are the PNG color
       types followed by their supported bit depths (Note  pngcrush  does  not
       support changing a file to color type 3 from another color type.):

          ·  0 : grayscale without alpha channel (1,2,4,8,16)

          ·  2 : true color without alpha channel (8,16)

          ·  3 : indexed color (1,2,4,8)

          ·  4 : grayscale with alpha channel (8,16)

          ·  6 : true color with alpha channel (8,16)

       An alpha channel represents transparency on a per pixel basis. An alpha
       value of  zero  is  completely  transparent.  An  alpha  channel  of  2
       bitdepth-1 is completely opaque.

Filter Types

       The  IDAT  chunk  can optionally be filtered before compression.  These
       filters can make the IDAT chunk more compressible  without  losing  any
       data  and  result  in a smaller PNG file.  These filters are applied to
       the bytes of the IDAT chunk, not  the  pixels.  Following  is  a  brief
       description of the filters, see the PNG specification for details:

          ·  0 : no filter

          ·  1  :  ’sub’  transmits  the  difference between each byte and the
             value of the corresponding byte of the prior pixel.

          ·  2 : ’up’ transmits the difference between each byte and the value
             of the corresponding byte of the pixel above this pixel

          ·  3  : ’average’ transmits the difference between each byte and the
             average of the bytes described in filters 1 and 2

          ·  4  :  ’paeth’  computes  a  simple   linear   function   of   the
             corresponding byte in three neighboring pixels (paeth_predictor =
             left + above - upper left), then transmits the difference between
             the  byte  in  question  and  the neighboring byte closest to the
             value of paeth_predictor.

Text Chunks

       Textual information pertaining to an image can  be  conveyed  with  the
       tEXt,  iTXt  and  zTXt  chunks.  All  text  chunks consist of a keyword
       followed by a string.  The following keywords are defined  in  the  PNG
       specification: (you may invent keywords for other purposes):

                 Title: Short title or caption for image

                 Author: Name of image’s creator

                 Description: Longer description of image

                 Copyright: Copyright notice

                 Creation Time: Time of original image creation

                 Software: Software used to create the image

                 Disclaimer: Legal disclaimer

                 Warning: Warning of nature of content

                 Source: Device used to create the image

                 Comment: Miscellaneous comment.

       A tEXt chunk stores text in the ISO/IEC 8859-1 (Latin-1) character set.
       zTXt chunks also use  the  Latin-1  character  set,  but  the  text  is
       compressed.   This  can  be  useful for large text chunks.  iTXt chunks
       consist of text in the UTF-8 of the Unicode character set.

       keyword must be at least 1 character and less than 80 characters.  text
       must  be less than 2048  characters when using pngcrush  For  now,  you
       can only add ten tEXt, iTXt, or zTXt chunks per pngcrush run.

SEE ALSO

       png(5), libpng(3), zlib(3).

AUTHOR

       This manual page was written by David  Whedon  dwhedon@gordian.com  for
       the  Debian  GNU/Linux system (but may be used by others).  Much of the
       information  was  gleaned  from  "PNG   (Portable   Network   Graphics)
       Specification, Version 1.2"

                                                                   pngcrush(1)