dwww Home | Manual pages | Find package

Pamflip User Manual(1)      General Commands Manual      Pamflip User Manual(1)

NAME
       pamflip - flip or rotate a PAM or PNM image

SYNOPSIS
       pamflip  { -leftright | -lr | -topbottom | -tb | -transpose | -xy | -ro-
       tate90 | -r90 | -cw | -rotate270 | -r270 | -ccw  |  -rotate180  |  -r180
       -null   |   -xform=xform1,xform2...    }   [-memsize=mebibytes]  [-page-
       size=bytes] [pamfile]

       All options can be abbreviated to their shortest unique prefix.  You may
       use two hyphens instead of one to designate an option.  You may use  ei-
       ther white space or an equals sign between an option name and its value.

DESCRIPTION
       This program is part of Netpbm(1).

       pamflip  flips  a  PAM or PNM image top for bottom or left for right, or
       transposes it horizontal for vertical, or rotates it 1, 2, or 3  quarter
       turns.

       To rotate at other angles, use pnmrotate.  It is much slower, though.

       The  input  image is pamfile, or Standard Input if pamfile is not speci-
       fied.

       To flip/rotate a JFIF (JPEG) image losslessly, use  jpegtran.   jpegtran
       is part of the Independent Jpeg Group's compression library package, not
       part  of  Netpbm.  The normal Netpbm way to flip a JFIF file would be to
       convert it to PNM, use pamflip, and convert back  to  JFIF.   But  since
       JPEG  compression  is lossy, the resulting image would have less quality
       than the original.  jpegtran, on the other hand, can do this  particular
       transformation directly on the compressed data without loss.

OPTIONS
       In  addition  to  the  options common to all programs based on libnetpbm
       (most notably -quiet, see ]8;;index.html#commonoptions\ Common Options]8;;\ ), pamflip recognizes the fol-
       lowing command line options:

   Specifying the Transformation
       You must supply exactly one of the following options:

       pamflip's predecessor (before Netpbm 10.7 - August 2002) pnmflip did not
       have the -xform option and instead allowed you to specify any number  of
       the  other options, including zero.  It applied all the indicated trans-
       formations, in the order given, just like with pamflip's -xform  option.
       (Reason for the change: this kind of interpretation of options is incon-
       sistent  with  the  rest  of Netpbm and most of the Unix world, and thus
       hard to understand and to implement).

       -leftright

       -lr    Flip left for right.

       -topbottom

       -tb    Flip top for bottom.

       -transpose

       -xy    Transpose horizontal for vertical.  I.e. make the pixel at  (x,y)
              be at (y,x).

       -rotate90

       -r90

       -ccw   Rotate counterclockwise 90 degrees.

       -rotate180

       -r180  Rotate 180 degrees.

       -rotate270

       -r270

       -cw    Rotate counterclockwise 270 degrees (clockwise 90 degrees)

       -null  No  change.   (The  purpose  of this option is the convenience of
              programs that invoke pamflip after computing the kind  of  trans-
              formation desired, including none at all).

              This option was new in Netpbm 10.13 (December 2002).

       -xform=xform1,xform2...
              Apply  all the transforms listed, in order.  The valid values for
              the transforms are as follows and have the same meanings  as  the
              identically named options above.

       •      leftright

       •      topbottom

       •      transpose

              This option was new in Netpbm 10.13 (December 2002).

   Memory Management
       The  following  options help pamflip use memory efficiently.  Some flip-
       ping operations on very large images can cause pamflip to  have  a  very
       large working set, which means if you don't have enough real memory, the
       program  can  page thrash, which means it takes a ridiculous amount time
       to run.  If your entire image fits in real  memory,  you  don't  have  a
       problem.   If you're just flipping top for bottom or left for right, you
       don't have a problem.  Otherwise, pay attention.  If  you're  interested
       in  the  details of the thrashing problem and how pamflip approaches it,
       you're invited to read a complete explanation in comments in the  source
       code.

       -memsize=mebibytes
              mebibytes  is  the  size  in  mebibytes (aka megabytes) of memory
              available for pamflip.  It is the lesser of the amount of real or
              virtual memory available.

              pamflip does nothing special to allocate real memory  or  control
              its  allocation  --  it gets whatever it gets just by referencing
              virtual memory normally.  The real memory figure in  question  is
              the maximum amount that pamflip can be expected to end up with by
              doing  that.   This  is just about impossible for you to know, of
              course, but you can estimate.  The total real memory in your sys-
              tem should be a major factor in your estimate.

              If pamflip cannot fit the entire image in the  amount  of  memory
              you  specify,  it does the transformation in chunks, using tempo-
              rary files for intermediate results.

              In strict horizontal transformations (left for right) or the null
              transformation, pamflip never keeps more than one row in  memory,
              so  the  memory size is irrelevant and pamflip doesn't use tempo-
              rary files.

              In strict vertical transformations (top for  bottom),  even  when
              you  allow pamflip enough memory to keep the entire image in vir-
              tual memory, it accesses it in a  single  pass,  which  does  not
              cause  any  thrashing;  the  chunks in temporary files thus don't
              help.

              The real memory is important when you do a column for row type of
              transformation (e.g. -rotate90).  In that case, even  if  pamflip
              can  fit  the  entire image in virtual memory at once, if it does
              not also fit in real memory, the program will thrash  like  crazy
              because  of  the  order in which pamflip accesses the pixels, and
              that means it will take a  ridiculously  long  time  to  run.   A
              proper -memsize drastically reduces the paging.

              If  you  specify  -memsize  too large, pamflip may attempt to get
              more virtual memory than the system allows it and  fail.   If  it
              can  get  the  virtual  memory,  but  -memsize is larger than the
              amount of real memory the system allows it and the transformation
              is row for column, it will page thrash and run  very  slowly.   A
              value even slightly too high is the same as infinity.

              If  you specify -memsize too small, the program will run slightly
              more slowly because of extra overhead in  manipulating  temporary
              files.   Also, if your environment isn't set up to make temporary
              files possible, pamflip will fail.

              Doing the entire transformation "in memory" doesn't speed  things
              up  as  much  as you might think, because even with the temporary
              files, the data is just as likely to be in memory.  Virtual  mem-
              ory  gets  paged to disk and disk files get cached in memory.  In
              fact, the pixels fit much more compactly into memory when  stored
              in  a temporary file than when stored "in memory" because pamflip
              uses a more efficient format.  So you're likely to have less disk
              I/O when you allow pamflip less memory.

              If you do not specify -memsize, pamflip assumes infinity.

              This option did not exist before Netpbm 10.7 (August 2002).

              Before Netpbm 10.42 (March 2008), this  option  applied  only  to
              real  memory.  pamflip would always keep the entire image in vir-
              tual memory and if it could not get  enough  virtual  memory,  it
              failed.  pamflip accessed the pixels in an order designed to keep
              real memory use within the specified amount.

       -pagesize=bytes
              bytes is the size in bytes of a paging unit -- the amount of mem-
              ory  that  gets paged in or out as an indivisible unit -- in your
              system.  The default is 4KiB.

              This option has no effect.

              Before Netpbm 10.42 (March 2008), pamflip used it to control  its
              use of real memory.

              This option did not exist before Netpbm 10.7 (August 2002).

   Miscellaneous
       -verbose
              This  option  causes  pamflip to issue messages to Standard Error
              about its progress.

SEE ALSO
       pnmrotate(1), pnm(1), pam(1), jpegtran manual

HISTORY
       pamflip replaced pnmflip in Netpbm 10.13 (December  2002).   pamflip  is
       backward compatible, but also works on PAM images.

AUTHOR
       Copyright (C) 1989 by Jef Poskanzer.

DOCUMENT SOURCE
       This  manual  page  was generated by the Netpbm tool 'makeman' from HTML
       source.  The master documentation is at

              http://netpbm.sourceforge.net/doc/pamflip.html

netpbm documentation            20 January 2008          Pamflip User Manual(1)

Generated by dwww version 1.16 on Tue Dec 16 04:19:25 CET 2025.