jpegoptim - utility to optimize/compress JPEG/JFIF files.
jpegoptim [ options ] [ filenames ]
jpegoptim is used to optimize/compress jpeg files. Program
supports lossless optimization, which is based on optimizing the Huffman
tables. And so called "lossy" optimization where in addition to
optimizing Huffman tables user can specify upperlimit for image quality.
NOTE! By default jpegoptim modifies the input files (if they are
optimized), to preserve original files use option -d to specify
alternate directory for saving the optimized files to.
Only normal files are optimized (symbolic links and special files
are skipped). Also, any other hard links to the file being optimized (as
created using link(2)) are unaffected.
Options may be either the traditional POSIX one letter options, or
the GNU style long options. POSIX style options start with a single ``-'',
while GNU long options start with ``--''.
Options offered by jpegoptim are the following:
- -d<path>,
--dest=<path>
- Sets alternative destination directory where to save optimized files
(default is to overwrite the originals). Please note that unchanged files
won't be added to the destination directory. This means if the source file
can't be compressed, no file will be created in the destination path.
- -f, --force
- Force optimization, even if the result would be larger than the original
file.
- -h, --help
- Displays short usage information and exits.
- -m<quality>,
--max=<quality>
- Sets the maximum image quality factor (disables lossless optimization
mode, which is by default enabled). This option will reduce quality of
those source files that were saved using higher quality setting. While
files that already have lower quality setting will be compressed using the
lossless optimization method.
Valid values for quality parameter are: 0 - 100
- -n, --noaction
- Don't really optimize files, just print results.
- -S<size>,
--size=<size>
- Try to optimize file to given size (disables lossless optimization mode).
Target size is specified either in kilobytes (1 - n) or as percentage (1%
- 99%) of the original file size.
- -T<threshold>,
--threshold=<threshold>
- Keep the file unchanged if the compression gain is lower than the
threshold (%).
Valid values for threshold are: 0 - 100
- -w<max>,
--workers=<max>
- Set the maximum number of parallel processes to launch. (Default is 1)
- -b, --csv
- Print progress info in CSV format.
- -o, --overwrite
- Overwrite target file even if it exists (when using -d option).
- -p, --preserve
- Preserve file modification times.
- -P,
--preserve-perms
- Preserve file permissions (owner/group) by overwriting the original file.
This is slightly less safe than the default mode of operation (where new
file is first saved as temporary file and then renamed over the original
file). In this mode a backup of the original file is made with
.jpegoptim.bak extension, and this file is removed after the original file
has been successfully replaced. NOTE! if running jpegoptim as root there
is generally no need to use this option, as jpegoptim is able to preserve
file permissions when run by root in default mode.
- -q, --quiet
- Quiet mode.
- -t, --totals
- Print totals after processing all files.
- -v, --verbose
- Enables verbose mode (positively chatty).
- --all-normal
- Force all output files to be non-progressive. Can be used to convert all
input files to non-progressive JPEGs when used with --force option.
- --all-progressive
- Force all output files to be progressive. Can be used to convert all
normal (non-progressive) JPEGs input files to progressive when used with
--force option.
- --all-arith
- Force all output files to use Arithmetic Coding. This option is
experimental and only available if jpegoptim was compiled with Arithmetic
Coding support enabled.
- --all-huffman
- Force all output files to use (traditional) Huffman coding. This option is
experimental and only available if jpegoptim was compiled with Arithmetic
Coding support enabled.
- --nofix
- Skip processing of any input files that have any errors/warnings during
decompression. By default jpegoptim will attempt to optimize any file that
it is able to decompress, even if decompression generates warnings. This
will 'fix' some (corrupt) JPEG images automatically. If this behaviour is
not desired, this option can be used to make jpegoptim to skip any input
files that contain any errors.
- --stdout
- Send output image to standard output. Note, if optimization didn't create
smaller file than the input file, then no output original image is passed
through unmodified (except any extra data after JPEG image will be
discarded).
- --stdin
- Read input image from standard input and send output to standard output
(--stdout is assumed when this option is used). When this option is used
then only one image is read from standard input. Any (other) input files
specified on command-line are ignored. Note, if input file '-' is seen on
command line then standard input is also assumed.
- --files-stdin
- Read names of files to process from standard input. One filename per line.
- --files-from=<filename>
- Read names of files to process from a file. One filename per line.
By default jpetoptim will keep common metadata (JPEG markers) and
discard any other (unknown ones).
Following markers are kept by default:
- EXIF
- IPTC
- ICC
- XMP
- COM (JPEG Comment markers)
JFIF marker will be regenerated (by libjpeg) during the process
(this cannot be changed). However, Adobe marker is also generated (or
omitted) by libjpeg based on the image colorspace, etc. This behavior
depends on libjpeg library version being used. To make sure Adobe marker is
preserved option --keep-adobe can be used.
To remove additional markers one or more the --strip-* options can
be used.
For example: --strip-icc --strip-xmp --strip-com
Alternatively it is possible to specify --strip-all and then one
or more of the --keep-* options to explicitly list which markers to keep
For example: --strip-all --keep-exif --keep-iptc
Options for controlling metadata (markers) in output files:
- -s, --strip-all
- Strip all markers from output file. (NOTE! by default only Comment &
Exif/IPTC/PhotoShop/ICC/XMP markers are kept, everything else is
discarded). Output JPEG still likely will contains one or two markers
(JFIF and Adobe APP14) depending on colorspace used in the image, as these
markers are generated by the libjpeg encoder automatically.
- --strip-none,
--keep-all
- Preserve "all" markers in the image. This will leave all markers
untouched in the image, except JFIF (APP0) and Adobe (APP14) markers as
those get regenerated by the libjpeg library.
NOTE! If this option is specified then any other --strip-* or
--keep-* options are ignored.
- --strip-com
- Strip Comment (COM) markers from output file.
- --strip-exif
- Strip EXIF markers from output file.
- --strip-iptc
- Strip IPTC / Adobe Photoshop (APP13) markers from output file.
- --strip-icc
- Strip ICC profiles from output file.
- --strip-xmp
- Strip XMP profiles from output file.
- --strip-jfif
- Strip JFIF markers from output file.
- --strip-jfxx
- Strip JFXX (JFIF Extensions) markers from output file.
- --strip-Adobe
- Strip Adobe markers from output file.
- --keep-com
- Do not strip any Comment (COM) markers from output file.
- --keep-exif
- Do not strip any EXIF markers from output file.
- --keep-iptc
- Do not strip any IPTC / Adobe Photoshop (APP13) markers from output
file.
- --keep-icc
- Do not strip any ICC profiles from output file.
- --keep-xmp
- Do not strip any XMP profiles from output file.
- --strip-jfif
- Do not strip any JFIF markers from output file.
- --strip-jfxx
- Do not strip any JFXX (JFIF Extensions) markers from output file.
- --keep-Adobe
- Do not strip Adobe markers from output file.
When using --size option, resulting file is not always exactly the
requested size. Workaround is to re-run jpegoptim on the same file again
which often will result file closer to target size.
Timo Kokkonen <tjko@iki.fi>
Copyright (C) 1996-2023 Timo Kokkonen
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.