Science and technology

My favourite Linux instructions for optimizing net pictures

I used to steer clear of pictures when working on-line. Handling and optimizing pictures might be each imprecise and time-consuming.

Then I discovered some instructions that modified my thoughts. To create net pages, I exploit Jekyll, so I’ve included that within the instructions. However, these instructions may also work with different static web site mills. 

Image instructions on Linux

The instructions that made all of the distinction for me are optipng, jpegoptim, and, after all, the venerable imagemagick. Together, they make dealing with pictures simple to handle and even automate.

Here’s an summary of how I applied my resolution utilizing these instructions. I positioned article pictures in my static/pictures folder. From there, I generated two copies of all PNG and JPG pictures:

  1. A cropped thumbnail model measuring 422 by 316
  2. A bigger banner model, measuring 1024 by 768

Then I positioned every copy (the thumbnail and the banner) into its personal folder, and I leveraged Jekyll’s customized variables for the folder paths. I define every of those steps in larger element under.


To observe together with my resolution, make certain you’ve got all of the instructions put in. On Linux, you may set up optipng, jpegoptim, and imagemagick utilizing your package deal supervisor.

On Fedora, CentOS, Mageia, and related:

$ sudo dnf set up optipng jpegoptim imagemagick

On Debian, Elementary, Mint, and related:

$ sudo apt set up optipng jpegoptim imagemagick

On macOS, use MacPorts or Homebrew.

brew set up optipng jpegoptim imagemagick

On Windows, use Chocolatey.

Creating folders for thumbnails and banners

After putting in the instructions, I created new folders below static/pictures. Generated thumbnails get positioned into img-thumbs, and banners go in img-normal.

$ cd static/pictures
$ mkdir -p img-thumbs img-normal

With the folders created, I copied all GIF, SVG, JPG, and PNG information to each folders. I exploit the GIFs and SVGs as-is for thumbnails and banner pictures.

$ cp content material/*.gif img-thumbs/; cp content material/*.gif img-normal/
$ cp content material/*.svg img-thumbs/; cp content material/*.svg img-normal/
$ cp content material/*.jpg img-thumbs/; cp content material/*.jpg img-normal/
$ cp content material/*.png img-thumbs/; cp content material/*.png img-normal/

Processing thumbnails

To resize and optimize the thumbnails, I exploit my three instructions.

I exploit the mogrify command from ImageMagick to resize the JPGs and PNGs. Since I need the thumbnails to be 422 by 316, the command seems to be like this:

$ cd img-thumbs
$ mogrify -resize 422x316 *.png
$ mogrify -format jpg -resize 422x316 *.jpg

Now I optimize the PNGs utilizing optipng and the JPGs utilizing jpegoptim:

$ for i in *.png; do optipng -o5 -quiet "$i"; achieved
$ jpegoptim -sq *.jpg

In the above command:

  • For optipng, -o5 swap units the extent of optimization, with 0 being the bottom.
  • For jpegoptim, -s strips all picture metadata, and -q units quiet mode.

Processing banners

I course of the banner pictures in basically the identical manner I course of the thumbnails, other than the size, that are 1024 by 768 for banners.

$ cd ..
$ cd img-normal
$ mogrify -resize 1024x768 *.png
$ mogrify -format jpg -resize 1024x768 *.jpg
$ for i in *.png; do optipng -o5 -quiet "$i"; achieved
$ jpegoptim -sq *.jpg

Configuring the paths in Jekyll

The img-thumbs listing now accommodates my thumbnails. and img-normal accommodates the banners. To make my life simpler, I set each of them to customized variables in my Jekyll _config.yml.

content-images-path: /static/pictures/img-normal/
: /static/pictures/img-thumbs/

Using the variables is easy. When I need to show the thumbnail, I prepend content-thumbs-images-path to the picture. When I need to show the complete banner, I prepend content-images-path.

{% if web page.banner_img %}
 <img src="{ prepend: site.url }" alt="Banner image for
{{ page.title }}"
{% endif %}


There are a number of enhancements I might make to my optimization instructions.

Using rsync to repeat solely modified information to img-thumbs and img-normal is one apparent enchancment. That manner, I’m not reprocessing information again and again. Adding these instructions to Git pre-commit hooks or a CI pipeline is one other helpful step.

Resizing and optimizing pictures to scale back their dimension is a win for the consumer and the net as an entire. Maybe my subsequent step for decreasing picture sizes might be webp.

Fewer bytes transmitted over the wire means a decrease carbon footprint, however that is one other article. The UX victory is nice sufficient for now.

This article was initially posted on the author’s blog and has been republished with permission.

Most Popular

To Top