ImageMagick is a suite of command-line utilities for modifying and working with images. ImageMagick can quickly perform operations on an image from a terminal, perform batch processing of many images, or be integrated into a bash script.

ImageMagick can perform a wide variety of operations. This guide will introduce you to ImageMagick's syntax and basic operations and show you how to combine operations and perform batch processing of many images.

Installation

ImageMagick isn't included in the default installations of Ubuntu and many other Linux distributions. To install it on Ubuntu, use the following command:

sudo apt-get install imagemagick

Converting Between Formats

The convert command takes an image, performs actions on it, and saves the image with the file name you specify. One of the most basic things you can do with it is converting images between formats. The following command takes a PNG file named "howtogeek.png" in the current directory and creates a JPEG image from it:

convert howtogeek.png howtogeek.jpg

convert formats

You can also specify a compression level for JPEG images:

convert howtogeek.png -quality 95 howtogeek.jpg

The number must be between 1 and 100. ImageMagick uses the quality level of the input image, if possible. If not, ImageMagick defaults to 92.

Resizing Images

The convert command can also quickly resize an image. The following command asks ImageMagick to resize an image to 200 pixels in width and 100 pixels in height:

convert example.png -resize 200x100 example.png

We've used the same file name here, so ImageMagick will overwrite the original file.

Using imagemagick to resize an image in the Linux terminal.

ImageMagick will try to preserve the aspect ratio if you use this command. It will alter the image to fit within a 200x100 area, but the image may not be exactly 200x100. If you want to force the image to become a specific size -- even if it messes up the aspect ratio -- add an exclamation point to the dimensions:

convert example.png -resize 200x100! example.png

You can also specify a specific width or height and ImageMagick will resize the image to that width or height while preserving the aspect ratio. The following command will resize an image to a width of 200:

convert example.png -resize 200 example.png

The following command will resize an image to a height of 100:

convert example.png -resize x100 example.png

Rotating an Image

ImageMagick can quickly rotate an image. The following command takes an image named howtogeek.jpg, rotates it by 90 degrees and saves the rotated image as howtogeek-rotated.jpg:

convert howtogeek.jpg -rotate 90 howtogeek-rotated.jpg

If you specified the same file name, ImageMagick would save the rotated image over the original image file.

rotate

Applying Effects

ImageMagick can apply a variety of effects to an image. For example, the following command applies the "charcoal" effect to an image:

convert howtogeek.jpg -charcoal 2 howtogeek-charcoal.jpg

charcoal

The charcoal command applies an artistic "charcoal" style effect to an image -- the 2 in the command lets you control the strength of the effect.

howtogeek-charcoal

The following command applies the "Implode" effect with a strength of 1:

convert howtogeek.jpg -implode 1 howtogeek-imploded.jpg

implode

The implode effect makes it appear as if there's a black hole at the center of the image.

howtogeek-imploded

Combining Operations

All these operations can be combined. With a single command, you could resize an image, rotate it, apply an effect, and convert it to another format:

convert howtogeek.png -resize 400x400 -rotate 180 -charcoal 4 -quality 95 howtogeek.jpg

howtogeek-complex

This is just the start of what you can do with ImageMagick. There are many more operations you can combine.

Batch Processing

You can take advantage of Bash to quickly do batch processing of many images. For example, the following command would take all PNG files in the current directory, rotate them, and save a new copy of each with "rotated-" added to the beginning of each file name.

for file in *.png; do convert $file -rotate 90 rotated-$file; done

batch processing

You can easily modify this command to perform other actions. You can also integrate batch processing commands into a Bash shell script to automate image-processing operations.


Any article on ImageMagick will omit a lot of what you can do with it -- there are just too many options and commands. If you're interested in doing more with ImageMagick, check out the official documentation on the ImageMagick website for a much more in-depth look at ImageMagick.

Linux Commands

Files

tar · pv · cat · tac · chmod · grep ·  diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr

Processes

alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap

Networking

netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts