Publié par 25 commentaires

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: