How to Create an Image Cropping Folder Action with ImageMagick in macOS

Over the past few months, I’ve been contributing weekly market analyses to Liquid’s blog. Many of these posts contain cryptocurrency charts from TradingView that look something like this.

Before I upload charts, I usually like to crop off the metadata at the top, along with the whitespace and TradingView branding on the other three sides. I was doing this with a custom Photoshop batch action for a while, but the process of opening Photoshop every single time I wanted to upload a chart just felt so tedious and unnecessary. After some Googling and experimentation, I was able to create a macOS folder action that triggers an ImageMagick shell script that automatically crops images placed in the folder. Here’s how I did it.

Install ImageMagick

The easiest way to install ImageMagick is through Homebrew, a handy package manager for macOS. To install Homebrew, open up a Terminal window and run the following command.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"``

Next, run the following command to install ImageMagick.

brew install imagemagick

To verify that ImageMagick is installed correctly, run this command.

convert -version

If you see something like this, you’re good to go.

Version: ImageMagick 7.0.8-20 Q16 x86_64 2018-12-26 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules 
Delegates (built-in): bzlib freetype jng jp2 jpeg lcms ltdl lzma png tiff webp xml zlib

Create a macOS Folder Action

Now, open up Automator (Macintosh HD/Applications/Automator) and create a new folder action, and a select a target folder with the dropdown menu that reads “Folder action receives files and folders added to”.

Click on Actions, do a search for “Run Shell Script,” and double-click on it to add it to your workflow. Next, copy the following code into the shell script text box and select “as arguments” in the Pass input dropdown.

for f in "$@"; do
    [[ "$f" != *.jpg && "$f" != *.png && "$f" != *.gif ]] && continue
    /usr/local/bin/mogrify -crop +7+44 "$f"
    /usr/local/bin/mogrify -crop -7-37 "$f"
done

[[ "$f" != *.jpg && "$f" != *.png && "$f" != *.gif ]] matches JPG, PNG, and GIF files. If you need to process other image formats like TIFF and WEBP, just add && "$f" != *.format after "$f" != *.gif. -crop +7+44 "$f" crops 7 pixels from the right side and 44 pixels on the top, while -crop -7-37 "$f" crops 7 pixels from the left side and 37 pixels from the bottom. These two crop commands are preceded by mogrify, which overwrites the image file. If you need the cropped image to be a new file, you’ll need to use the convert command and specify an output file.

Here are a few more examples of how to use the -crop command.

  • -crop +0+50 crops 50 pixels from the top.
  • -crop +50+0 crops 50 pixels from the right.
  • -crop -0-50 crops 50 pixels from the bottom.
  • -crop -50-0 crops 50 pixels from the left.

Finally, save the workflow and place an image file into the target folder. If all goes well, the folder action should run and spit out a cropped image.

In Apps
#ImageMagick #macOS