Publié le

ImageMagick et MAMP sur OS X

Introduction:

J’avais besoin d’une solution GRATUITE pour pouvoir convertir via php des images EPS en png ou jpg.

La solution: ImageMagick ET Ghostscript

Elle permet bien plus que de convertir des eps en png, elle prend en charge une liste impressionnante de formats de fichier différent mais également de fonction très intéressante, et surtout facilement scriptable.

Voici une petite procédure pour installer ImageMagick et configurer la prise en charge via MAMP, et si l’envie vous en dis, la compilation de la classe Imagick() de pecl pour une utilisation plus aisée au niveau PHP.

Install effectuée sur un G5 bi-proc 1.8GHz, en 10.5.7
update: Testé également sous MacOS X 10.6.2
update2: Testé également sous MacOS X Lion 10.7.4

Pré-requis:

  • Mamp 1.9.6 (ou dernière version disponible)
  • XCode
    La version de XCode va dépendre de la version du système installée sur ton Mac:
    Pour Lion (10.7) il te faudra la version 4.1 de XCode!
    Update: XCode est disponible gratuitement sur le MacAppStore
  • X11 (depuis le DVD d’install OS X)
  • MacPort

Une fois que les pré-requis sont installés, nous allons installer ImageMagick via MacPort

  1. Ouvrir un terminal shell puis entrer:
    sudo port selfupdate

    Si une erreur « port not found » survient, appliquer alors ceci dans le shell:
    (on rend disponible de nouvelle valeurs de variables)

    export PATH=$PATH:/opt/local/bin
    export MANPATH=$MANPATH:/opt/local/share/man
    export INFOPATH=$INFOPATH:/opt/local/share/info
  2. On met à jour « port« :
    sudo port selfupdate
  3. On installe « ImageMagick »
    sudo port install ImageMagick

    Note: cette commande prend du temps, environ 1h15 dans mon cas.
    update: celà dépend bien entendu de la config du Mac, sous un MacMini en 10.6.2, 30 minutes seulement…

  4. On installe « Ghostscript » pour la prise en charge « PS, EPS » pour « ImageMagick »
    sudo port install ghostscript
  5. On va maintenant gérer la partie MAMP:
    Terminer et quitter MAMP!
    Editer le fichier

    /Applications/MAMP/Library/bin/envvars
  6. Commenter les deux lignes ci-après de façon à obtenir ceci:
    #DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
    #export DYLD_LIBRARY_PATH
  7. Et ajouter cette ligne tout à la fin du fichier:
    export PATH="$PATH:/opt/local/bin"
  8. Enregistrer le fichier
  9. Lancer MAMP
  10. Pour tester, voici un exemple assez simple qui va prendre le fichier « test.eps« , le convertir en « test.jpg » et le réduire au max 800x600px
    Il faut pour cela mettre un fichier EPS au même emplacement que le petit script PHP ci-dessous et de l’exécuter:

    <?php
    exec('convert -resize 800x600 -quality 90 test.eps test.jpg');
    ?>
  11. On peut également utiliser la commande « convert » dans un shell standard.

Source:

Et pour la classe Imagick?

update: non testé sous 10.6.x
update: non testé sous 10.7.x

Télécharger les sources pecl ici
Dans cet expemple, j’ai utilisé la version 2.3.0RC2, laissez vos commentaires au cas ou… 🙂

  1. Désarchiver le fichier et copier le dossier « imagick » à la racine de Macintosh HD.
  2. Lancer un terminal
    cd /imagick/
    phpize
    ./configure --with-imagick=/opt/local
    make
    make install
  3. Il va retourner
    Installing shared extensions:   /usr/lib/php/extensions/no-debug-non-zts-20060613/
  4. On va maintenant copier cette extensions dans notre installation MAMP:
    cp /usr/lib/php/extensions/no-debug-non-zts-20060613/imagick.so /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/
  5. Il nous reste juste à donner au php.ini le chemin de cette extension.
    Editer:

    /Applications/MAMP/conf/php5/php.ini

    Vérifier la ligne

    extension_dir = (le chemin dans lequel vous avez copié imagick.so)

    Puis ajouter la ligne suivante après les existantes:

    extension=imagick.so

    Enregistrer le fichier php.ini

  6. Relancer les services MAMP.
  7. Pour tester, un petit script du genre:
    <?php
    $im = new Imagick('test.eps');
    $im->setFormat('PNG');
    $im->writeImage('testeddy.png');
    ?>

    Et voilà, c’est-y-pas-bô-la-vie?

Have fun happy visitor!

Source:

  • generalalcazar

    Ce tuto tombe à pique. Merci de partager ton expérience. je vais essayer çà dès que possible. J’avais essayé avec succès sur UBUNTU, mais j’ai besoin de développer une appli sur un OSX avec MAMP. Je donne le lien au passage pour ceux que cela intéresse : http://doc.ubuntu-fr.org/imagemagick

  • generalalcazar

    Moi… ça me met de bonne humeur 🙂

  • Hi sorry to write in english, my french sucks!

    I followed your instructions to install imagick with MAMP and when I restart MAMP I get the following error in php log:

    PHP Warning: PHP Startup: imagick: Unable to initialize module
    Module compiled with module API=20060613, debug=0, thread-safety=0
    PHP compiled with module API=20050922, debug=0, thread-safety=0
    These options need to match
    in Unknown on line 0

    Any idea to fix this?

    Thanx

    • What’s your MAMP version? I’ve used the MAMP 1.7.2, and PECL imagick 2.3.0RC2

  • Thank you man, I had an older version. Now it works perfect.

  • Nice post — this really hits home for me.

  • Satori

    Great post for mamp users, thanks it works perfectly for me (pecl compilation not tested)

  • Jo

    Any idea of how to get this working on Snow Leopard. This instructions don’t seem to work. Imagemagick works, but imagick the PHP extension does not work, I’m assuming there needs to be some sort of change for Snow Leopard?

  • emb

    Merci, merci. C’etait une « grande chose » pour moi. Thank you so much. (one note: envars ==> envvars)

  • Bonjour,

    merci pour ce tuto qui est parfait 😉

    françois

  • @Jo
    The issue with Snow Leopard is the compilation of imagick in 64-bit mode. It needs to be 32-bit for MAMP to work nicely with it. I’m praying MAMP 1.8.5 (or 1.9) will be 64-bit for Snow Leopard users. I wonder if compiling MAMP in Snow Leopard will help.

    Wish me luck… I still haven’t been successful!

    Check this link out:
    http://unrealexpectations.com/blog/2010/01/mamp-imagick-on-snow-leopard/

  • jacob

    i can’t get the PECL step to work, I am downloading the 2.03 file from the site, getting
    imagick-2.3.0.tar. Then it unpacks to a folder called imagick-2.3.0, which has another folder in it called imagick-2.3.0 along with a file called package.xml.
    i’ve tried renaming the top one to ‘imagick’ as well as just using the inner one, etc.
    is the PECL step necessary?

  • jacob

    i got it to run, but it errs:

    Cannot find config.m4.

  • This topic was not very easy to handle but your write-up is just perfect. Well done.

  • You can try to install imagick PECL extension reading my post, a compendium every notes on the internet: http://bit.ly/cbxl9B
    And work fine, enjoy.

  • I think this information is useful for so many people at my office. I will save it for them.

  • yo

    is » ./configure -–with-imagick=/opt/local » and no « ./configure –with-imagick=/opt/local ».

    • Yep, this is a bug with wordpress… Thanks 😉

      • 🙂 No, it’s an admin bug 😉 Corrected now.

  • Après 10 tentatives d'installation la seule version pecl qui ait fonctionné est la 2.2.2 mais je n'ai pas testé la 2.3.0RC2.

    En tout cas cela a réglé ma Fatal Error : No decode delegate for this image format…

  • david terranova

    Hello !
    Merci pour ce billet fort utile.
    Fonctionnel sous Mountain Lion 10.8, MAMP et avec un petit peu d’huile coude avec le php de os x aussi.
    Tellement plus efficace que GD2..

    • david terranova

       Bon alors j’ai parlé trop tôt…
      ca fonctionne depuis le shell mais pas avec MAMP…
      l’extension n’est pas chargé..
      je continue à chercher, si vous avez une idée…

      • mk3d

        Je vais regarder pour mettre à jour ce post pour 10.8
        As-tu bien exporté les variables dans le fichier envvars de Mamp? Ou est-ce pour l’extension? Sinon avec exec() ça devait fonctionner vu que OK dans le shell?

        • david terranova

          Bonjour,
          Ca fonctionne avec exec, mais mamp/php ne veut rien savoir…
          les vars sont pourtant bien exportées

  • Salut et merci pour ce tuto.
    Je bloque à l’étape 2 de Imagick :

    phpize

    Cannot find config.m4.
    Make sure that you run ‘/usr/bin/phpize’ in the top level source directory of the module

    Des idées ?