Nexcess Logo

How to optimize JPEGs, PNGs, and GIFs from the CLI using jpegoptim, OptiPNG, & Gifsicle

Knowledge Base Home

Notice anything different?

We've enhanced the appearance of our portal and we're working on updating screenshots. Things might look different, but the functionality remains the same.
September 10, 2019

If you need to optimize images while at the same time preserving their quality and dimensions, it is possible to compress these images through the CLI. Optimizing images in this manner is known as lossless compression. This article assumes you are already somewhat familiar with Linux. If you are not, then consider using an application instead.

The three command-line utilities available to all Nexcess clients are jpegoptim, OptiPNG, and Gifsicle. Each tool optimizes image files of the relevant type by compressing their size as much as possible while upholding the quality of those images. If you are a Nexcess client, installation of these tools is unnecessary; all Nexcess servers include jpegoptim, OptiPNG, and Gifsicle.

When referring to the below commands, replace the angle brackets (<>) and everything between them with the indicated information.

jpegoptim

With jpegoptim, you can use the CLI to compress JPG files while preserving image quality. It is possible to compress a single file, multiple files at once, or all files within a directory.   

Individual JPGs

Use the following syntax, but replace <filename> with actual name of the file to be compressed, and choose the proper extension:

jpegoptim <filename>.jpg

For example, to compress the file named samplefile.jpg, the command would resemble:

jpegoptim samplefile.jpg

Multiple JPGs

Use the following syntax to compress multiple JPGs with one command: 

jpegoptim <filename_1>.jpg <filename_2>.jpg <file_name3>.jpg

For example:

jpegoptim samplefile1.jpg samplefile2.jpg samplefile3.jpg

All JPGs within a directory

To compress JPGS within a directory, go to the directory containing those images, then issue the command to compress all files within that directory:

cd <directory>/
jpegoptim *.jpg

Lossy compression

The above techniques allow for lossless compression that preserves image quality. If desired, you may compress images past this point (lossy compression), though it will permanently reduce the quality of those images. There are two methods.

The first and most useful of these methods involves using the --max flag with a value of 0 - 100 to define the desired quality level. The highest quality image is 100. Though it is possible to define a value as low as 0, a value lower than 90 will result in noticeable degradation.

The syntax is:

jpegoptim --max=<quality_level> <filename>.jpg

For example:

jpegoptim --max=90 <filename>.jpg

As an alternative, it is possible to specify a desired file size. To do so, use this syntax:

jpegoptim --size=<desired_size> <filename>.jpg

For example, if you wanted to compress a single file to 500k, it would resemble:

jpegoptim --size=500k samplefile.jpg

Or, if you wanted to compress all files within a directory to 1M, it would resemble:

jpegoptim --size=1M *.jpg

Additional information

For more details about jpegoptim tool, run:

man jpegoptim

OptiPNG

With OptiPNG, you can use the CLI to compress PNG files while preserving image quality and dimensions. As with jpegoptim, It is possible to compress a single file, multiple files at once, or all files within a directory.  The use of OptiPNG strongly resembles that of using jpegoptim.

Individual PNGs

Use the following syntax, but replace <filename> with actual name of the file to be compressed, and choose the proper extension:

optipng <filename>.png 

For example, to compress the file named samplefile.png, the command would resemble:

optipng samplefile.png

Multiple PNGs

Use the following syntax to compress multiple PNGs with one command: 

optipng <filename_1>.png <filename_2>.png <file_name3>.png 

For example:

optipng samplefile1.png samplefile2.png samplefile3.png

All PNGs within a directory

To compress PNGs within a directory, first go to the directory containing those images, then issue the command to compress all files within that directory: 

cd <directory>/
optipng *.png

Lossy compression

PNG was designed as a lossless format; therefore, loss compression is not possible.

Additional information

For more details about Optipng, run:

man optipng

Gifsicle

Gifsicle allows you to optimize GIF files by compressing them to the smallest possible size while preserving image quality. It is possible to compress a single file, multiple files at once, or all files within a directory.  

Individual GIFs

Use the following syntax, but replace <filename> with actual name of the file to be compressed, and choose the proper extension:

gifsicle --batch --optimize <filename>.gif 

For example, to compress the file named samplefile.jpg, the command would resemble:

gifsicle --batch --optimize samplefile.gif 

For some files, the above command may not result in a smaller filesize. For these files you can run the same command with a higher optimization level than the default:

gifsicle --batch --optimize=3 <filename>.gif

Multiple GIFs

Use the following syntax to compress multiple JPEGs with one command: 

gifsicle --batch --optimize <filename_1>.gif <filename_2>.gif <file_name3>.gif

For example:

gifsicle --batch --optimize samplefile1.gif samplefile2.gif samplefile3.gif

All GIFs within a directory

To compress GIFs within a directory, go to the directory containing those images, then issue the command to compress all files within that directory:

cd <directory>/
gifsicle --batch --optimize *.gif

Lossy compression

Like PNG, GIF was designed as a lossless format; therefore, lossy compression is not possible.

Additional information

For more details about Gifsicle tool, run:

man gifsicle


For 24-hour assistance any day of the year, contact our support team by email or through your Client Portal.

Jason Dobry
We use cookies to understand how you interact with our site, to personalize and streamline your experience, and to tailor advertising. By continuing to use our site, you accept our use of cookies and accept our Privacy Policy.