Pour Hébergement Web, Hébergement pour WordPress et Serveur Dédié Managed

ImageMagick est une puissante collection d'outils en ligne de commande qui permettent de traiter les images côté serveur. Vous pouvez ainsi automatiser des tâches telles que la conversion, le redimensionnement ou la modification d'images directement sur votre espace Web. C'est idéal pour le traitement des téléchargements dans les systèmes de gestion de contenu ou pour l'adaptation dynamique des images par des scripts.

Dans cet article, nous vous présentons les cas d'utilisation les plus courants. Vous apprendrez ,

  • Comment effectuer des traitements d'images de base (conversion, mise à l'échelle) via SSH ;

  • Comment activer de manière ciblée pour votre espace web la prise en charge PDF, désactivée par défaut pour des raisons de sécurité ;
  • Comment piloter la conversion PDF en toute sécurité à partir de scripts PHP.

Condition préalable

Traitement de base des images via SSH

L'outil central d'ImageMagick est la commandeconvert. Cette commande permet de traiter les images directement dans le terminal.

Voici quelques exemples pratiques d'utilisation :
 

Convertir le format de l'image

ImageMagick permet de lire et d'écrire des images dans plus de 200 formats, dont PNG, JPEG, JPEG 2000, GIF, TIFF, DPX, EXR, WebP, PostScript, PDF et SVG

Pour convertir une image dans un autre format, utilisez la commande convert selon le schéma convert <fichier source> <fichier cible>. Le format dans lequel le fichier est converti est défini par l'extension du fichier cible. 

Par exemple, pour copier l'image Fleur.jpg, disponible au format JPEG, au format PNG, saisissez la commande comme suit :

convert Fleur.jpg Fleur.png


Dans le sens inverse (PNG → JPEG), cela fonctionne de la même manière :

convert Fleur.png Fleur.jpg

 

Mettre l'image à l'échelle (changer la résolution)

Vous pouvez également utiliser ImageMagick pour modifier la résolution et donc la taille d'une image. Pour ce faire, utilisez la commande convert avec le paramètre resize.

Par exemple, pour réduire de moitié (50%) la résolution du fichier image Fleur.png, utilisez la commande suivante :

convert -resize 50% Fleur.png

La commande suivante redimensionne l'image de manière à ce qu'elle tienne dans un rectangle de 480x95 pixels, tout en conservant le rapport hauteur/largeur d'origine. Le résultat a donc une largeur maximale de 480 pixels et une hauteur maximale de 95 pixels.

convert -resize 480x95 Fleur.png

Par défaut, ImageMagick conserve le rapport hauteur/largeur de l'image afin d'éviter les déformations. Toutefois, si vous souhaitez forcer l'image à s'adapter exactement à la taille cible, même si cela entraîne des déformations, ajoutez un point d'exclamation ( !) juste après l'indication de la taille.

convert -resize 480x95! Fleur.png

Le redimensionnement des images est également possible directement lors de la conversion dans un autre format. Voici un exemple de la combinaison d'une conversion de format (JPEG → PNG) et d'une mise à l'échelle de 50 %.

convert Fleur.jpg -resize 50% Fleur.png

 

 

Remarque

En ce qui concerne la mise à l'échelle, n'oubliez pas qu'il s'agit ici de la résolution en pixels et non de la taille d'affichage à l'écran.

  • Si vous réduisez la résolution de 50 %, une image de 1000 x 1000 pixels devient une image de 500 x 500 pixels. Au lieu d'un million de pixels, vous n'avez plus que 250 000 pixels, soit un quart des pixels de l'image originale.

  • Si vous comparez l'original et la version redimensionnée directement côte à côte sur l'écran, l'image redimensionnée n'occupe plus qu'un quart de la surface de l'image originale. En d'autres termes, l'image originale est dans ce cas quatre fois plus grande que l'image redimensionnée.

Activer le support PDF

Remarque

Dans les contrats commandés à partir du 18/09/2025, le support PDF n'est pas disponible.

Pour des raisons de sécurité, le traitement des fichiers PDF est désactivé dans la configuration standard d'ImageMagick. Vous pouvez toutefois activer cette fonction de manière ciblée pour votre espace Web en créant votre propre fichier de configuration :

  • Créez le sous-répertoire suivant dans le répertoire principal(/) de votre espace Web. Vous pouvez le faire via un client FTP ou directement par SSH avec la commande mkdir -p ~/.config/ImageMagick.

    mkdir -p ~/.config/ImageMagick

  • Créez un fichier nommé policy.xml dans ce nouveau répertoire. Par SSH, vous pouvez par exemple utiliser l'éditeur nano pour cela :

    nano ~/.config/ImageMagick/policy.xml

  • Copiez le code XML suivant dans son intégralité dans le fichier policy.xml. Ce code remplace les politiques par défaut et autorise l'accès en lecture et en écriture pour des formats tels que PDF, PS et EPS.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE policymap [
    <!ELEMENT policymap (policy)+>
    <!ATTLIST policymap xmlns CDATA #FIXED ''>
    <!ELEMENT policy EMPTY>
    <!ATTLIST policy xmlns CDATA #FIXED '' domain NMTOKEN #REQUIRED
    name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
    stealth NMTOKEN #IMPLIED value CDATA #IMPLIED>
    ]>
    <policymap>
       <policy domain="resource" name="memory" value="256MiB"/>
       <policy domain="resource" name="map" value="512MiB"/>
       <policy domain="resource" name="width" value="16KP"/>
       <policy domain="resource" name="height" value="16KP"/>
       <policy domain="resource" name="area" value="128MB"/>
       <policy domain="resource" name="disk" value="1GiB"/>
       <policy domain="resource" name="thread" value="2"/>
       <policy domain="delegate" rights="none" pattern="URL" />
       <policy domain="delegate" rights="none" pattern="HTTPS" />
       <policy domain="delegate" rights="none" pattern="HTTP" />
       <policy domain="path" rights="none" pattern="@*"/>
       <policy domain="coder" rights="read | write" pattern="{PS,PS2,PS3,EPS,XPS,PDF,PNG}" />
       <policy domain="module" rights="read | write" pattern="{PS,PS2,PS3,EPS,XPS,PDF,PNG}" />
    </policymap>

  • Enregistrez le fichier policy.xml. Si vous avez créé le fichier localement, téléchargez-le par SFTP dans le répertoire.config/ImageMagick.

Le support PDF pour ImageMagick est maintenant actif. Les modifications prennent effet immédiatement.

Utiliser la conversion PDF dans les scripts PHP

Si vous souhaitez ouvrir ImageMagick à partir d'un script PHP pour traiter des PDF, une étape supplémentaire est nécessaire. Par défaut, les scripts PHP ne connaissent pas le chemin d'accès à votre fichier policy.xml. Vous devez le faire connaître via la variable d'environnement HOME.

Le chemin absolu vers votre répertoire d'espace Web (Document Root) est nécessaire. Pour savoir comment le déterminer, consultez l'article du Centre d'Assistance Déterminer le chemin absolu d'un espace Web (Document Root).

L'exemple de script PHP suivant montre comment définir la variable d'environnement et ensuite convertir un fichier PDF en un fichier JPG.

<?php

// Remplacez ce chemin par le chemin absolu vers votre répertoire d'espace web.
$home_path = "/homepages/12/d123456789/htdocs" ;

// Définit la variable d'environnement HOME pour qu'ImageMagick puisse voir la policy.xml.
putenv("HOME=" . $home_path) ;

// Définir le chemin complet vers les fichiers et l'outil de conversion.
$pdf_file = $home_path . "/document.pdf" ;
$jpg_file = $home_path . "/preview.jpg" ;
$convert_path = "/usr/bin/convert" ;

// Assemblez la commande et exécutez-la.
// L'ajout de [0] fait en sorte que seule la première page du PDF soit convertie.
$command = $convert_path . " " . escapeshellarg($pdf_file . "[0]") . " " . escapeshellarg($jpg_file) ;
$output = shell_exec($command) ;

// Optionnel : afficher la sortie ou l'erreur (pour le débogage)
if ($output) {
   echo "Erreur sortie : " . $output ;
} else {
   echo "Conversion démarrée avec succès." ;
}

?>

Attention

La fonction shell_exec() exécute des commandes shell directement sur le serveur. Assurez-vous toujours qu'aucune entrée utilisateur non nettoyée (par exemple, les noms de fichiers d'un formulaire de téléchargement) n'entre directement dans la commande, afin d'éviter les failles de sécurité comme l'injection de commande. Utilisez des fonctions telles que escapeshellarg() pour sécuriser les chemins d'accès aux fichiers.