Shazam! Use Image::Magick with Perlbrew in minutes

The open source ImageMagick software provides amazing tools for creating and manipulating images in over 100 formats. Unfortunately, installing ImageMagick’s Perl module under Perlbrew can be a frustrating and time-consuming task. However it doesn’t have to be this way - with the method described below you can have the module installed in minutes, no root access required!

Update 07-01-2014

Zaki (@zhmughal) has worked up a sweet shell script to automate the installation process for you, so you can save the finger work for using ImageMagick with your next Perl program:)

Requirements

You’ll need to have Perlbrew and a local Perl installation via Perlbrew on Unix-based platform. This has been tested on Perl 5.16.3 but should work on any modern Perl version.

Preparation

Create a local directory: we will install ImageMagick here. Open up the terminal and enter the following:

mkdir ~/local

Installing Image::Magick - don’t use CPAN

Although the Image::Magick module is available on CPAN, installing it via CPAN is usually a fruitless task as the process croaks on make. Instead download the whole ImageMagick tarball. Once downloaded, navigate to the tarball’s parent directory using the terminal and un-tar the archive with the following command

tar xvfz ImageMagick.tar.gz

Now change into the new directory:

cd ImageMagick-6.8.8-0

Enter the following command, replacing [username], [path to CORE] and [path to Perl bin] with your system’s details. Remove the “–without-threads” text if your Perl was compiled with threads (here is how to check).

LDFLAGS=-L/home/[username]/perl5/perlbrew/perls/[path to CORE] \
    ./configure --prefix /home/[username]/local \
    --with-perl=/home/[username]/perl5/perlbrew/perls/[path to Perl bin] \
    --enable-shared --without-threads

Here is a completed example for my system:

LDFLAGS=-L/home/sillymoose/perl5/perlbrew/perls/perl-5.16.3/lib/5.16.3/x86_64-linux/CORE \
    ./configure --prefix /home/sillymoose/local \
    --with-perl=/home/sillymoose/perl5/perlbrew/perls/perl-5.16.3/bin/perl \
    --enable-shared --without-threads

Running this command should cause ImageMagick to run a series of configuration checks, at the end of which it will print a configuration summary, which should look something like this:

ImageMagick is configured as follows. Please verify that this configuration
matches your expectations.

Host system type: x86_64-unknown-linux-gnu
Build system type: x86_64-unknown-linux-gnu

                  Option                        Value
-------------------------------------------------------------------------------
Shared libraries  --enable-shared=yes       yes
Static libraries  --enable-static=yes       yes
Module support    --with-modules=no     no
GNU ld            --with-gnu-ld=yes     yes
Quantum depth     --with-quantum-depth=16   16
High Dynamic Range Imagery
                  --enable-hdri=no      no

Delegate Configuration:
BZLIB             --with-bzlib=yes      yes
Autotrace         --with-autotrace=no       no
Dejavu fonts      --with-dejavu-font-dir=default    /usr/share/fonts/dejavu/
DJVU              --with-djvu=yes       no
DPS               --with-dps=yes        no
FFTW              --with-fftw=yes       no
FlashPIX          --with-fpx=yes        no
FontConfig        --with-fontconfig=yes     no
FreeType          --with-freetype=yes       yes
GhostPCL          None              pcl6 (unknown)
GhostXPS          None              gxps (unknown)
Ghostscript       None              gs (9.10)
Ghostscript fonts --with-gs-font-dir=default    /usr/share/fonts/default/Type1/
Ghostscript lib   --with-gslib=no       no
Graphviz          --with-gvc=no     
JBIG              --with-jbig=yes       no
JPEG v1           --with-jpeg=yes       yes
JPEG-2000         --with-jp2=yes        yes
LCMS v1           --with-lcms=yes       yes
LCMS v2           --with-lcms2=yes      no
LQR               --with-lqr=yes        no
LTDL              --with-ltdl=yes       no
LZMA              --with-lzma=yes       yes
Magick++          --with-magick-plus-plus=yes   no (failed tests)
MUPDF             --with-mupdf=no       no
OpenEXR           --with-openexr=yes        no
PANGO             --with-pango=yes      no
PERL              --with-perl=/home/sillymoose/perl5/perlbrew/perls/perl-5.16.3/bin/perl        /home/sillymoose/perl5/perlbrew/perls/perl-5.16.3/bin/perl
PNG               --with-png=yes        yes
RSVG              --with-rsvg=no        no
TIFF              --with-tiff=yes       yes
WEBP              --with-webp=yes       no
Windows fonts     --with-windows-font-dir=  none
WMF               --with-wmf=no     no
X11               --with-x=         yes
XML               --with-xml=yes        yes
ZLIB              --with-zlib=yes       yes

Check that the image file formats you expect to be working with are showing as “yes”. If any are showing as “no” that you require, you’ll need to install the appropriate C library (e.g. libpng for PNG files) and re-run the previous command.

To install ImageMagick and the Image::Magick Perl module, run this command:

make install

Confirm Installation

Confirming that the Image::Magick module has installed is not quite straightforward either. With version Image Magick 6.8.8, the $VERSION variable is stored in the super class Image::Magick::Q16. Hence you’ll need to type:

perl -MImage::Magick::Q16\ 999

Which should yield:

Image::Magick::Q16 version 999 required--this is only version 6.88.

Sources

Thanks to Jason Galea - his invaluable GitHub notes formed the basis of this solution.


This article was originally posted on PerlTricks.com.

Tags

David Farrell

David is a professional programmer who regularly tweets and blogs about code and the art of programming.

Browse their articles

Feedback

Something wrong with this article? Help us out by opening an issue or pull request on GitHub