617 lines
17 KiB
HTML
617 lines
17 KiB
HTML
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML><HEAD><TITLE>Man page of PNMTOJPEG</TITLE>
|
|
</HEAD><BODY>
|
|
<H1>PNMTOJPEG</H1>
|
|
Section: User Commands (1)<BR>Updated: 07 March 2000<BR><A HREF="#index">Index</A>
|
|
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
|
|
|
<A NAME="lbAB"> </A>
|
|
<H2>NAME</H2>
|
|
|
|
pnmtojpeg - convert PNM image to a JFIF ("JPEG") image
|
|
<P>
|
|
<A NAME="lbAC"> </A>
|
|
<H2>SYNOPSIS</H2>
|
|
|
|
<B>pnmtojpeg</B>
|
|
|
|
[
|
|
<I>options</I>
|
|
|
|
]
|
|
[
|
|
<I>filename</I>
|
|
|
|
]
|
|
<P>
|
|
|
|
<P>
|
|
<A NAME="lbAD"> </A>
|
|
<H2>DESCRIPTION</H2>
|
|
|
|
<P>
|
|
|
|
<B>pnmtojpeg</B>
|
|
|
|
converts the named PBM, PGM, or PPM image file, or the standard input
|
|
if no file is named, to a JFIF file on the standard output.
|
|
<P>
|
|
|
|
<B>pnmtojpeg</B>
|
|
|
|
uses the Independent JPEG Group's JPEG library to create the output file.
|
|
See
|
|
<B><A HREF="http://www.ijg.org">http://www.ijg.org</A> </B>
|
|
|
|
for information on the library.
|
|
<P>
|
|
"JFIF" is the correct name for the image format commonly known as "JPEG."
|
|
Strictly speaking, JPEG is a method of compression. The image format
|
|
using JPEG compression that is by far the most common is JFIF. There is
|
|
also a subformat of TIFF that uses JPEG compression.
|
|
<P>
|
|
EXIF is an image format that is a subformat of JFIF (to wit, a JFIF
|
|
file that contains an EXIF header as an APP1 marker).
|
|
<B>pnmtojpeg</B>
|
|
|
|
creates an EXIF image when you specify the
|
|
<B>-exif</B>
|
|
|
|
option.
|
|
<P>
|
|
<A NAME="lbAE"> </A>
|
|
<H2>OPTIONS</H2>
|
|
|
|
The basic options are:
|
|
<DL COMPACT>
|
|
<DT id="1"><B>--exif=</B><I>filespec</I>
|
|
|
|
<DD>
|
|
This option specifies that the output image is to be EXIF (a subformat
|
|
of JFIF), i.e. it will have an EXIF header as a JFIF APP1 marker.
|
|
The contents of that marker are the contents of the specified file.
|
|
The special value
|
|
<B>-</B>
|
|
|
|
means to read the EXIF header contents from standard input. It is
|
|
invalid to specify standard input for both the EXIF header and the
|
|
input image.
|
|
<P>
|
|
The EXIF file starts with a two byte field which is the length of
|
|
the file, including the length field, in pure binary, most significant
|
|
byte first. The special value of zero for the length field means there
|
|
is to be no EXIF header, i.e. the same as no
|
|
<B>-exif</B>
|
|
|
|
option. This is useful for when you convert a file from JFIF to PNM
|
|
using
|
|
<B>jpegtopnm</B>,
|
|
|
|
then transform it, then convert it back to JFIF with
|
|
<B>pnmtojpeg</B>,
|
|
|
|
and you don't know whether or not it includes an EXIF header.
|
|
<B>jpegtopnm</B>
|
|
|
|
creates an EXIF file containing nothing but two bytes of zero when
|
|
the input JFIF file has no EXIF header. Thus, you can transfer
|
|
any EXIF header from the input JFIF to the output JFIF without
|
|
worrying about whether an EXIF header actually exists.
|
|
<P>
|
|
The contents of the EXIF file after the length field are the exact
|
|
byte for byte contents of the APP1 marker, not counting the length
|
|
field, that constitutes the EXIF header.
|
|
<P>
|
|
<DT id="2"><B>--quality=</B><I>n</I>
|
|
|
|
<DD>
|
|
Scale quantization tables to adjust image quality.
|
|
<I>n</I>
|
|
|
|
is 0 (worst) to 100 (best); default is 75. (See below for more info.)
|
|
<DT id="3"><B>--grayscale</B>
|
|
|
|
<DD>
|
|
<DT id="4"><B>--greyscale</B>
|
|
|
|
<DD>
|
|
Create gray scale JFIF file. With this option,
|
|
<B>pnmtojpeg</B>
|
|
|
|
converts color input to gray scale. If you don't specify this option,
|
|
The output file is in color format if the input is PPM, and grayscale
|
|
format if the input is PBM or PGM.
|
|
<P>
|
|
In the PPM input case, even if all the colors in the image are gray,
|
|
the output is in color format. Of course, the colors in it are still
|
|
gray. The difference is that color format takes up a lot more space
|
|
and takes longer to create and process.
|
|
<DT id="5"><B>--optimize</B>
|
|
|
|
<DD>
|
|
Perform optimization of entropy encoding parameters. Without this,
|
|
<B>pnmtojpeg</B>
|
|
|
|
uses default encoding parameters.
|
|
<B>--optimize</B>
|
|
|
|
usually makes the JFIF file a little smaller, but
|
|
<B>pnmtojpeg</B>
|
|
|
|
runs somewhat slower and needs much more memory. Image quality and speed of
|
|
decompression are unaffected by
|
|
<B>--optimize</B>.
|
|
|
|
<DT id="6"><B>--progressive</B>
|
|
|
|
<DD>
|
|
Create a progressive JPEG file (see below).
|
|
<DT id="7"><B>--comment=</B><I>text</I>
|
|
|
|
<DD>
|
|
Include a comment marker in the JFIF output, with comment text
|
|
<I>text</I>.
|
|
|
|
Without this option, there are no comment markers in the output.
|
|
<P>
|
|
</DL>
|
|
<P>
|
|
|
|
The
|
|
<B>--quality</B>
|
|
|
|
option lets you trade off compressed file size against quality of the
|
|
reconstructed image: the higher the quality setting, the larger the JFIF file,
|
|
and the closer the output image will be to the original input. Normally you
|
|
want to use the lowest quality setting (smallest file) that decompresses into
|
|
something visually indistinguishable from the original image. For this
|
|
purpose the quality setting should be between 50 and 95; the default of 75 is
|
|
often about right. If you see defects at
|
|
<B>--quality=75</B>,
|
|
|
|
then go up 5 or 10 counts at a time until you are happy with the output
|
|
image. (The optimal setting will vary from one image to another.)
|
|
<P>
|
|
|
|
<B>--quality=100</B>
|
|
|
|
generates a quantization table of all 1's, minimizing loss in the
|
|
quantization step (but there is still information loss in subsampling, as well
|
|
as roundoff error). This setting is mainly of interest for experimental
|
|
purposes. Quality values above about 95 are
|
|
<I>not</I>
|
|
|
|
recommended for normal use; the compressed file size goes up dramatically for
|
|
hardly any gain in output image quality.
|
|
<P>
|
|
|
|
In the other direction, quality values below 50 will produce very small files
|
|
of low image quality. Settings around 5 to 10 might be useful in preparing an
|
|
index of a large image library, for example. Try
|
|
<B>--quality=2</B>
|
|
|
|
(or so) for some amusing Cubist effects. (Note: quality
|
|
values below about 25 generate 2-byte quantization tables, which are
|
|
considered optional in the JFIF standard.
|
|
<B>pnmtojpeg</B>
|
|
|
|
emits a warning message when you give such a quality value, because some
|
|
other JFIF programs may be unable to decode the resulting file. Use
|
|
<B>--baseline</B>
|
|
|
|
if you need to ensure compatibility at low quality values.)
|
|
<P>
|
|
|
|
The
|
|
<B>--progressive</B>
|
|
|
|
option creates a "progressive JPEG" file. In this type of JFIF file, the data
|
|
is stored in multiple scans of increasing quality. If the file is being
|
|
transmitted over a slow communications link, the decoder can use the first
|
|
scan to display a low-quality image very quickly, and can then improve the
|
|
display with each subsequent scan. The final image is exactly equivalent to a
|
|
standard JFIF file of the same quality setting, and the total file size is
|
|
about the same -- often a little smaller.
|
|
<B>Caution:</B>
|
|
|
|
progressive JPEG is not yet widely implemented, so many decoders will be
|
|
unable to view a progressive JPEG file at all.
|
|
<P>
|
|
|
|
Options for advanced users:
|
|
<DL COMPACT>
|
|
<DT id="8"><B>--dct=int</B>
|
|
|
|
<DD>
|
|
Use integer DCT method (default).
|
|
<DT id="9"><B>--dct=fast</B>
|
|
|
|
<DD>
|
|
Use fast integer DCT (less accurate).
|
|
<DT id="10"><B>--dct=float</B>
|
|
|
|
<DD>
|
|
Use floating-point DCT method.
|
|
The float method is very slightly more accurate than the int method, but is
|
|
much slower unless your machine has very fast floating-point hardware. Also
|
|
note that results of the floating-point method may vary slightly across
|
|
machines, while the integer methods should give the same results everywhere.
|
|
The fast integer method is much less accurate than the other two.
|
|
<DT id="11"><B>--restart=</B><I>n</I>
|
|
|
|
<DD>
|
|
Emit a JPEG restart marker every
|
|
<I>n </I>
|
|
|
|
MCU rows, or every
|
|
<I>n </I>
|
|
|
|
MCU blocks if you append
|
|
<B>B </B>
|
|
|
|
to the number.
|
|
<B>--restart 0</B>
|
|
|
|
(the default) means no restart markers.
|
|
<DT id="12"><B>--smooth=</B><I>n</I>
|
|
|
|
<DD>
|
|
Smooth the input image to eliminate dithering noise.
|
|
<I>n</I>,
|
|
|
|
ranging from 1 to 100, indicates the strength of smoothing. 0 (the
|
|
default) means no smoothing.
|
|
<DT id="13"><B>--maxmemory=</B><I>n</I>
|
|
|
|
<DD>
|
|
Set a limit for amount of memory to use in processing large images. Value is
|
|
in thousands of bytes, or millions of bytes if you append
|
|
<B>M </B>
|
|
|
|
to the number. For example,
|
|
<B>--max=4m</B>
|
|
|
|
selects 4,000,000 bytes. If
|
|
<B>pnmtojpeg</B>
|
|
|
|
needs more space, it will use temporary files.
|
|
<DT id="14"><B>--verbose</B>
|
|
|
|
<DD>
|
|
Print to the Standard Error file messages about the conversion process.
|
|
This can be helpful in debugging problems.
|
|
</DL>
|
|
<P>
|
|
|
|
The
|
|
<B>--restart</B>
|
|
|
|
option tells
|
|
<B>pnmtojpeg </B>
|
|
|
|
to insert extra markers that allow a JPEG decoder to resynchronize
|
|
after a transmission error. Without restart markers, any damage to a
|
|
compressed file will usually ruin the image from the point of the
|
|
error to the end of the image; with restart markers, the damage is
|
|
usually confined to the portion of the image up to the next restart
|
|
marker. Of course, the restart markers occupy extra space. We
|
|
recommend
|
|
<B>--restart=1</B>
|
|
|
|
for images that will be transmitted across unreliable networks such as Usenet.
|
|
<P>
|
|
|
|
The
|
|
<B>--smooth</B>
|
|
|
|
option filters the input to eliminate fine-scale noise. This is often useful
|
|
when converting dithered images to JFIF: a moderate smoothing factor of 10 to
|
|
50 gets rid of dithering patterns in the input file, resulting in a smaller
|
|
JFIF file and a better-looking image. Too large a smoothing factor will
|
|
visibly blur the image, however.
|
|
<P>
|
|
|
|
Options for wizards:
|
|
<DL COMPACT>
|
|
<DT id="15"><B>--baseline</B>
|
|
|
|
<DD>
|
|
Force baseline-compatible quantization tables to be generated. This clamps
|
|
quantization values to 8 bits even at low quality settings. (This switch is
|
|
poorly named, since it does not ensure that the output is actually baseline
|
|
JPEG. For example, you can use
|
|
<B>--baseline</B>
|
|
|
|
and
|
|
<B>--progressive</B>
|
|
|
|
together.)
|
|
<DT id="16"><B>--qtables=</B><I>filespec</I>
|
|
|
|
<DD>
|
|
Use the quantization tables given in the specified text file.
|
|
<DT id="17"><B>--qslots=n[,...]</B>
|
|
|
|
<DD>
|
|
Select which quantization table to use for each color component.
|
|
<DT id="18"><B>--sample=</B><I>HxV[,...]</I>
|
|
|
|
<DD>
|
|
Set JPEG sampling factors for each color component.
|
|
<DT id="19"><B>--scans=</B><I>filespec</I>
|
|
|
|
<DD>
|
|
Use the scan script given in the specified text file.
|
|
See below for information on scan scripts.
|
|
</DL>
|
|
<P>
|
|
|
|
The "wizard" options are intended for experimentation with JPEG. If you
|
|
don't know what you are doing, <B>don't use them</B>. These switches are
|
|
documented further in the file wizard.doc that comes with the
|
|
Independent JPEG Group's JPEG library.
|
|
<A NAME="lbAF"> </A>
|
|
<H2>EXAMPLES</H2>
|
|
|
|
<P>
|
|
|
|
This example compresses the PPM file foo.ppm with a quality factor of
|
|
60 and saves the output as foo.jpg:
|
|
<DL COMPACT>
|
|
<DT id="20"><DD>
|
|
<B>pnmtojpeg --quality=60 foo.ppm > foo.jpg</B>
|
|
|
|
<DT id="21"><DD>
|
|
<B>cat foo.bmp | bmptoppm | pnmtojpeg > foo.jpg</B>
|
|
|
|
<P>
|
|
</DL>
|
|
<A NAME="lbAG"> </A>
|
|
<H2>HINTS</H2>
|
|
|
|
JFIF is not ideal for cartoons, line drawings, and other images that have
|
|
only a few distinct colors. For those, try instead
|
|
<B>pnmtopng</B>
|
|
|
|
or
|
|
<B>ppmtobmp</B>.
|
|
|
|
If you need to convert such an image to JFIF, though, you should
|
|
experiment with
|
|
<B>pnmtojpeg</B>'s
|
|
|
|
<B>--quality</B>
|
|
|
|
and
|
|
<B>--smooth</B>
|
|
|
|
options to get a satisfactory conversion.
|
|
<B>--smooth 10</B>
|
|
|
|
or so is often helpful.
|
|
<P>
|
|
|
|
JPEG compression is notable for being a "lossy." This means that,
|
|
unlike with most graphics conversions, you lose information, which
|
|
means image quality, when you convert to JFIF. If you convert from
|
|
PPM to JFIF and back repeatedly, image quality loss will accumulate.
|
|
After ten or so cycles the image may be noticeably worse than it was
|
|
after one cycle.
|
|
<P>
|
|
|
|
Because of this, you should do all the manipulation you have to do on
|
|
the image in some other format and convert to JFIF as the last step.
|
|
And if you can keep a copy in the original format, so much the better.
|
|
PNG is a good choice for a format that is lossless, yet fairly
|
|
compact. GIF is another way to go, but chances are you can't create a
|
|
GIF image without owing a lot of money to Unisys and IBM, holders of
|
|
patents on the LZW compression used in the GIF format.
|
|
<P>
|
|
|
|
The
|
|
<B>--optimize</B>
|
|
|
|
option to
|
|
<B>pnmtojpeg</B>
|
|
|
|
is worth using when you are making a "final" version for posting or archiving.
|
|
It's also a win when you are using low quality settings to make very small
|
|
JFIF files; the percentage improvement is often a lot more than it is on
|
|
larger files. (At present,
|
|
<B>--optimize</B>
|
|
|
|
mode is automatically in effect when you generate a progressive JPEG file).
|
|
<P>
|
|
|
|
Another program,
|
|
<B>cjpeg</B>,
|
|
|
|
is similar.
|
|
<B>cjpeg</B>
|
|
|
|
is maintained by the Independent JPEG Group and packaged with the
|
|
JPEG library which
|
|
<B>pnmtojpeg</B>
|
|
|
|
uses for all its JPEG work. Because of that, you may expect it to exploit
|
|
more current JPEG features. Also, since you have to have the library to
|
|
run
|
|
<B>pnmtojpeg</B>,
|
|
|
|
but not vice versa,
|
|
<B>cjpeg</B>
|
|
|
|
may be more commonly available.
|
|
<P>
|
|
|
|
On the other hand,
|
|
<B>cjpeg</B>
|
|
|
|
does not use the NetPBM libraries to process its input, as all the NetPBM
|
|
tools such as
|
|
<B>pnmtojpeg</B>
|
|
|
|
do. This means it is less likely to be consistent with all the other programs
|
|
that deal with the NetPBM formats. Also, the command syntax of
|
|
<B>pnmtojpeg</B>
|
|
|
|
is consistent with that of the other Netpbm tools, unlike
|
|
<B>cjpeg</B>.
|
|
|
|
<P>
|
|
<A NAME="lbAH"> </A>
|
|
<H2>SCAN SCRIPTS</H2>
|
|
|
|
<P>
|
|
Use the
|
|
<B>-scan</B>
|
|
|
|
option to specify a scan script. Or use the
|
|
<B>-progressive</B>
|
|
|
|
option to specify a particular built-in scan script.
|
|
<P>
|
|
Just what a scan script is, and the basic format of the scan script file,
|
|
is covered in the
|
|
<B>wizard.doc </B>
|
|
|
|
file that comes with the Independent JPEG Group's JPEG library.
|
|
Scan scripts are same for
|
|
<B>pnmtojpeg</B>
|
|
|
|
as the are for
|
|
<B>cjpeg</B>.
|
|
|
|
<P>
|
|
This section contains additional information that isn't, but probably
|
|
should be, in that document.
|
|
<P>
|
|
First, there are many restrictions on what is a valid scan script. The
|
|
JPEG library, and thus
|
|
<B>pnmtojpeg</B>,
|
|
|
|
checks thoroughly for any lack of compliance with these restrictions, but
|
|
does little to tell you how the script fails to comply. The messages are
|
|
very general and sometimes untrue.
|
|
<P>
|
|
To start with, the entries for the DC coefficient must come before any
|
|
entries for the AC coefficients. The DC coefficient is Coefficient 0;
|
|
all the other coefficients are AC coefficients. So in an entry for
|
|
the DC coefficient, the two numbers after the colon must be 0 and 0.
|
|
In an entry for AC coefficients, the first number after the colon must
|
|
not be 0.
|
|
<P>
|
|
In a DC entry, the color components must be in increasing order.
|
|
E.g. "0,2,1" before the colon is wrong. So is "0,0,0".
|
|
<P>
|
|
In an entry for an AC coeffient, you must specify only one color
|
|
component. I.e. there can be only one number before the colon.
|
|
<P>
|
|
In the first entry for a particular coefficient for a particular color
|
|
component, the "Ah" value must be zero, but the Al value can be any
|
|
valid bit number. In subsequent entries, Ah must be the Al value from
|
|
the previous entry (for that coefficient for that color component),
|
|
and the Al value must be one less than the Ah value.
|
|
<P>
|
|
The script must ultimately specify at least some of the DC coefficent
|
|
for every color component. Otherwise, you get the error message
|
|
"Script does not transmit all the data." You need not specify all of
|
|
the bits of the DC coefficient, or any of the AC coefficients.
|
|
<P>
|
|
There is a standard option in building the JPEG library to omit scan
|
|
script capability. If for some reason your library was built with
|
|
this option, you get the message "Requested feature was omitted at
|
|
compile time."
|
|
<P>
|
|
<A NAME="lbAI"> </A>
|
|
<H2>ENVIRONMENT</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="22"><B>JPEGMEM</B>
|
|
|
|
<DD>
|
|
If this environment variable is set, its value is the default memory limit.
|
|
The value is specified as described for the
|
|
<B>--maxmemory</B>
|
|
|
|
option. An explicit
|
|
<B>--maxmemory </B>
|
|
|
|
option overrides any
|
|
<B>JPEGMEM</B>.
|
|
|
|
<P>
|
|
</DL>
|
|
<A NAME="lbAJ"> </A>
|
|
<H2>SEE ALSO</H2>
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?1+cjpeg">cjpeg</A></B>(1),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?1+djpeg">djpeg</A></B>(1),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?1+jpegtran">jpegtran</A></B>(1),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?1+rdjpgcom">rdjpgcom</A></B>(1),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?1+wrjpgcom">wrjpgcom</A></B>(1)
|
|
|
|
<BR>
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?5+ppm">ppm</A></B>(5),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?5+pgm">pgm</A></B>(5),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?1+jpegtopnm">jpegtopnm</A></B>(1)
|
|
|
|
<BR>
|
|
|
|
Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
|
|
Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44.
|
|
<A NAME="lbAK"> </A>
|
|
<H2>LIMITATIONS</H2>
|
|
|
|
Arithmetic coding is not supported for legal reasons.
|
|
<P>
|
|
|
|
The program could be much faster.
|
|
<P>
|
|
<A NAME="lbAL"> </A>
|
|
<H2>AUTHOR</H2>
|
|
|
|
<B>pnmtojpeg</B>
|
|
|
|
and this man page were derived in large part from
|
|
<B>cjpeg</B>,
|
|
|
|
by the Independent JPEG Group.
|
|
The program is otherwise by Bryan Henderson on March 07, 2000.
|
|
<P>
|
|
<P>
|
|
<P>
|
|
<P>
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="23"><A HREF="#lbAB">NAME</A><DD>
|
|
<DT id="24"><A HREF="#lbAC">SYNOPSIS</A><DD>
|
|
<DT id="25"><A HREF="#lbAD">DESCRIPTION</A><DD>
|
|
<DT id="26"><A HREF="#lbAE">OPTIONS</A><DD>
|
|
<DT id="27"><A HREF="#lbAF">EXAMPLES</A><DD>
|
|
<DT id="28"><A HREF="#lbAG">HINTS</A><DD>
|
|
<DT id="29"><A HREF="#lbAH">SCAN SCRIPTS</A><DD>
|
|
<DT id="30"><A HREF="#lbAI">ENVIRONMENT</A><DD>
|
|
<DT id="31"><A HREF="#lbAJ">SEE ALSO</A><DD>
|
|
<DT id="32"><A HREF="#lbAK">LIMITATIONS</A><DD>
|
|
<DT id="33"><A HREF="#lbAL">AUTHOR</A><DD>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:05:24 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|