How to use ImageMagick

You may or may not know, but to manipulate images in WordPress, you must have an image optimization library in the PHP application. In fact, without it, WordPress will not even be able to produce thumbnails images. Instead, your images will display full-sized in areas where a thumbnail would be better. 

There are two popular image optimization libraries: ImageMagick and GD. Though both perform similar actions, ImageMagick rises above for WordPress use. This article will explain why ImageMagick is great for WordPress, how to find and use ImageMagick, and give examples of ImageMagick in action.

As of February 25, 2020, the servers for WordPress customers have the PHP extensions that allows the use of imagick from PHP code.

Why is ImageMagick Great for WordPress?

ImageMagick is a software suite that can be used to manipulate images. As mentioned above, GD and ImageMagick complete similar tasks, however, ImageMagick produces sharper, higher-quality compressed images.  In addition, it’s dependable, supports many image formats (some lesser-used formats like TIFF, RAW), and can facilitate more tasks easily. To use ImageMagick with InMotion Hosting servers, you will need to use PHP or execute a command in SSH.

Accessing ImageMagick

By default, ImageMagick is installed on InMotion Hosting servers. However, it can only be accessed through the command line, a cron job or PHP code on a web page. The path for the command line options would look like this:

  • /usr/bin/convert
  • /usr/bin/mogrify

ImageMagick has many modules that can be loaded, but for the purposes of InMotion’s hosting servers, the main commands available are convert and mogrify. These commands can be used through PHP using a native extension called Imagick. For more information, please see the Imagick class in the PHP documentation.

Using ImageMagick

ImageMagick can be used through SSH and PHP. The following examples are executed in SSH. Each example uses the convert command. By default, the convert command maintains the aspect ratio of the image by.

Using Convert

When you use the commands below, the apect ratio of the image is not changed. This means that if you convert an image that is originally 320×220 pixels to 64 x 64 pixels (as per the examples below), the actual size will be 64 x 44 pixels, because it shrinks to the smallest dimension while maintaining the aspect ratio. For more information, please see aspect ratio below.

VPS and Dedicated servers with SSH access

convert larger-image.png -resize 64×64 smaller-image.png

Cron job command for shared servers with no SSH access

/usr/bin/convert public_html/larger-image.png -resize 64×64 public_html/smaller-image.png

PHP command for shared servers with no SSH access

exec(‘/usr/bin/convert /home/USERNAME/public_html/larger-image.png -resize 64×64 /home/USERNAME/public_html/smaller_image.jpg’);

You will need to replace USERNAME with the actual username of the account. You also need to make sure that the folder where the converted image is being saved has the proper write permissions.

Using Mogrify

The mogrify command can be used in place of convert to resize an image with the main difference being that it modifies the original file. Like convert, the mogrify command maintains the aspect ratio of the image by default. Want to learn more? Read additional documentation on mogrify.

VPS and Dedicated servers with SSH access

mogrify -resize 64×64 original-image.png

Cron job for shared servers with no SSH access

/usr/bin/mogrify -resize 64×64 public_html/orignal-image.png

PHP script command for shared servers with no SSH access

exec(‘/usr/bin/mogrify -resize 64×64’ /home/USERNAME/public_html/original-image.png );

You will need to replace USERNAME with the actual username of the account. You will also need to make sure that the folder where the converted image is being saved has the proper write permissions.

Understanding Image Aspect Ratio

The simplest way to understand aspect ratio is to imagine taking an image and shrinking it down without causing any distortion. For example, the commands above use a square image of 64 x 64 pixels. If it was resized to 32 x 32 pixels, its aspect ratio will be maintained and will not show any distortion. However, if it was resized to 32 x 20 pixels, then the image is no longer square and the aspect ratio would be different causing distortion. You can see the differences in the cat images below. Using the above convert or mogrify commands will change the size of the image while automatically maintaining the aspect ratio. If you wish to force a change in aspect ratio, then the main difference in the command will be to add an “!” after the declared size for the image.

convert original-image.png -resize 64×64/! smaller-image.png
mogrify -resize 64×64/! original-image.png
Original ImageAspect ratio maintainedAspect ratio changed
Original Cat Image
Aspect ratio maintained
Aspect ratio changed

Additional Information on ImageMagick

ImageMagick is a complex suite of tools that allow you to create and modify images in different formats. The information above is merely a snapshot of its vast capabilities. The options available on InMotion’s Shared servers primarily involve the convert and mogrify commands, but there are many other modules and processing options that you can load if you are using ImageMagick on a VPS or Dedicated server.


Of note, when using ImageMagick,  processing many images at once can severely affect the resources of your server. For more information on server resources, please see excessive CPU processing. If you want to process a lot of images in bulk, do them in several groups and during off-peak hours. Ask our Community Support or 24/7 technical support team if you require further information. You can also visit the ImageMagick.org for additional tutorials and documentation.

Thoughts on “How to use ImageMagick

  • Hello, 

    I’m having serious trouble with ImageMagick on InMotion hosting, since a month. I have stripped my code up to a imple demo script:

    <?php

    $jpg   = “005.jpg”;

     

    $thumb = “005-thumb” . microtime(true). “.jpg”;

    $cmd = ‘/usr/bin/convert  -resize 300×150^ “‘ . $jpg . ‘”  “‘ . $thumb . ‘”‘;

    echo “CMD run: <pre>” . $cmd . “</pre>”;

    exec($cmd);

    echo “<p>Thumbnail created?: <strong>” . (file_exists($thumb) ? “yes” : “no”) . ‘</strong></p>‘;

    echo ‘<p>Total time: ‘ . (microtime(1) – $start) . ‘ms</p>‘;

     

    ?>

    I have tried both with absolute file paths and relative (as above); the final result does not change.

    The script takes ages to complete (up to 10-15s) and most of the times it fails. I’ve been chatting with the InMotion support for hours without results. It seems not to be an Apache error or permision issuesor other server related problems. The scripts causes s resuorce limit and then fails. Running the same script from the commnd line works as expected. Running the script in other hosting companies works as expected.

    The support team ended saying that, since it works at least once in 10-15 tries, then it’s not a server issue, but a script problem.

    Removing the ^ operator from the covert command, seemg t get better, but far from 100% performance.

    Is ImageMagick still supported on InMotion shared hosting and in what extent?

    • As you may have noticed using image processing software like Photoshop or Illustrator, resizing images requires a lot of computing power, and image sizes and resolutions can vary. You may want to consider upgrading to a VPS/Dedicated hosting plan.

  • I am new to programming, so this might be a simple fix. 

    I am getting this error:

    Fatal error: Class ‘Imagick’ not found in /home/intera37/public_html/imageMagickTest/upload.php on line 15

    I am simply importing a jpg from my desktop and using Imagick to create a thumbnail. 

    Do I need to import Imagick class inside my php file? What am I doing wrong?

     

    Thanks!

     

    This is my html:

    <!DOCTYPE html>

    <html>

        <body>

    <form action=”upload.php” method=”post” enctype=”multipart/form-data”>

     <label for=”file”>Image:</label>

     <input type=”file” name=”file” id=”file”><br>

     <input type=”submit” name=”submit” value=”Upload and Crop”>

    </form>

        </body>

    </html>

     

    // THIS IS MY PHP upload.php

     

    <?php

     

    if (isset($_FILES[“file”])) {

        $tmpFile = $_FILES[“file”][“name”];

        $fileName = “renamedfile_01.jpg”; 

     

            $image = new Imagick($tmpFile); // THIS IS WHERE IT BREAKS (LINE 15)

            $image->thumbnailImage(100, 100);

            $image->writeImage($fileName);

     

        echo $fileName;

    }

    ?>

    • Hello Destrada,

      As per the article above, the COMMAND is NOT “Imagick”. It’s either mogrify or convert. The imagick command does not exist on the server. Change your code and review the article for further information.

      Regards,
      Arnel C.

  • I’m having a problem using the convert method from the exec function in php.  I can resample one jpg image, but a similar image in the same directory with the same permissions won’t convert.  Is this a thing?

     

    thanks 🙂

    • Hello Dale,

      Sorry you’re having problems with the command. Not sure what’s happening, but have you tried ANOTHER file other than the ones you’ve had trouble with? I checked the command and it’s definitely okay. Also, if you could provide us the exact domain where you’re trying to get this to work, we would be happy to review this for you.

      Regards,
      Arnel C.

Leave a Reply to InMotionFan Cancel reply