Per Web Hosting, Hosting per WordPress e Performance Hosting

ImageMagick è una potente suite di strumenti da riga di comando che permette di modificare le immagini sul server. Con questi strumenti puoi automatizzare operazioni quali la conversione, il ridimensionamento o la modifica delle immagini direttamente nel tuo spazio web. È la soluzione ideale per gestire i caricamenti nei sistemi di gestione dei contenuti o per adattare dinamicamente le immagini tramite script.

In questo articolo ti presenteremo i casi d'uso più comuni. Imparerai:

  • come eseguire l'elaborazione di base delle immagini (conversione, ridimensionamento) tramite SSH;

  • come abilitare il supporto PDF per il tuo spazio web, che è disabilitato di default per motivi di sicurezza;
  • come gestire la conversione PDF in modo sicuro tramite script PHP.

Requisiti

  • Per utilizzare i comandi descritti, è necessario essere connessi allo spazio web tramite SSH. Le istruzioni su come stabilire una connessione SSH sono riportate nell'articolo Accesso Shell (SSH) con PuTTY.

Modifica di base delle immagini tramite SSH

Lo strumento centrale di ImageMagick è il comando convert. Con questo strumento puoi modificare le immagini direttamente nel terminale.

Ecco alcuni esempi pratici:
 

Convertire il formato di un'immagine

ImageMagick permette di leggere e scrivere immagini in oltre 200 formati, tra cui PNG, JPEG, JPEG 2000, GIF, TIFF, DPX, EXR, WebP, PostScript, PDF e SVG

Per convertire un'immagine in un altro formato, utilizza il comando convert secondo lo schema convert <file sorgente> <file destinazione>. Il formato in cui viene convertito il file è determinato dall'estensione del file di destinazione. 

Ad esempio, per copiare l'immagine esempio.jpg in formato PNG, immetti il comando come segue:

comvert esempio.jpg esempio.png


Funziona allo stesso modo anche il contrario (PNG → JPEG):

convert esempio.png esempio.jpg

 

Ridimensionare un'immagine (cambiare la risoluzione)

Puoi utilizzare ImageMagick anche per modificare la risoluzione e quindi le dimensioni di un'immagine. A tale scopo, utilizza il comando convert insieme al parametro resize .

Ad esempio, per ridurre del 50% la risoluzione del file esempio.png, utilizza il seguente comando:

convert -resize 50% esempio.png

Il comando seguente ridimensiona l'immagine in modo che si adatti a un rettangolo di 480x95 pixel, mantenendo le proporzioni originali. Il risultato sarà quindi al massimo largo 480px e alto 95px.

convert -resize 480x95 esempio.png

Per impostazione predefinita, ImageMagick mantiene le proporzioni dell'immagine per evitare distorsioni. Tuttavia, se desideri forzare l'immagine a una dimensione esatta, anche se ciò comporta distorsioni, aggiungi un punto esclamativo (!) subito dopo la specifica delle dimensioni.

convert -resize 480x95! esempio.png

Il ridimensionamento delle immagini può essere eseguito anche contemporaneamente alla conversione in un altro formato. Ecco un esempio che combina la conversione del formato (da JPEG a PNG) con un ridimensionamento del 50%.

convert esempio.jpg -resize 50% esempio.png

Nota bene

Per quanto riguarda il ridimensionamento, tieni presente che si intende la risoluzione in pixel e non la dimensione di visualizzazione sullo schermo.

  • Se riduci la risoluzione del 50%, un'immagine di 1000 x 1000 pixel diventerà un'immagine di 500 x 500 pixel. Invece di un milione di pixel, ne avrai solo 250.000, ovvero un quarto dei pixel dell'immagine originale.

  • Se confronti l'originale con la versione ridimensionata sullo schermo, l'immagine ridimensionata occuperò solo un quarto della superficie dell'immagine originale. In altre parole: in questo caso, l'immagine originale è quattro volte più grande di quella ridimensionata.

Attivare il supporto PDF

Nota bene

Il supporto PDF non è disponibile nei contratti ordinati a partire dal 18/09/2025.

Per motivi di sicurezza, l'elaborazione dei file PDF è disattivata nella configurazione standard di ImageMagick. Tuttavia, puoi abilitarla creando un file di configurazione personalizzato nel tuo spazio web:

  • Crea la seguente sottodirectory nella directory principale(/) del tuo spazio web. Puoi farlo tramite un client FTP o direttamente tramite SSH con il comando mkdir -p ~/.config/ImageMagick.

    mkdir -p ~/.config/ImageMagick

  • Crea un file con il nome policy.xml in questa nuova directory. Tramite SSH, puoi utilizzare ad esempio l'editor nano per farlo:

    nano ~/.config/ImageMagick/policy.xml

  • Copia completamente il seguente codice XML nel file policy.xml. Questo sovrascrive le regole standard e consente l'accesso in lettura e scrittura per formati come PDF, PS ed 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>

  • Salva il file policy.xml. Se hai creato il file localmente, caricalo via SFTP nella cartella.config/ImageMagick.

Il supporto PDF per ImageMagick è ora attivo. Le modifiche avranno effetto immediato.

Utilizzare la conversione PDF negli script PHP

Se desideri aprire ImageMagick da uno script PHP per elaborare dei PDF, è necessario un ulteriore passaggio. Per impostazione predefinita, gli script PHP non conoscono il percorso del tuo file policy.xml. Devi quindi renderlo noto tramite la variabile d'ambiente HOME.

È necessario il percorso assoluto della directory del tuo spazio web (document root). Per sapere come identificarlo, consulta l'articolo Individuare il percorso assoluto (document root) di un sito web.

Il seguente esempio di script PHP mostra come impostare la variabile d'ambiente e poi convertire un file PDF in un file JPG.

<?php

// sostituisci questo percorso con il percorso assoluto verso la tua directory webspace.
$home_path = "/homepages/12/d123456789/htdocs";

// Imposta la variabile d'ambiente HOME affinché ImageMagick trovi il file policy.xml.
putenv("HOME=" . $home_path);

// Definisci il percorso completo dei file e dello strumento convert.
$pdf_file = $home_path . "/dokument.pdf";
$jpg_file = $home_path . "/vorschau.jpg";
$convert_path = "/usr/bin/convert";

// Componi il comando ed eseguilo.
// L'aggiunta di [0] assicura che venga convertita solo la prima pagina del PDF.
$command = $convert_path . " " . escapeshellarg($pdf_file . "[0]") . " " . escapeshellarg($jpg_file);
$output = shell_exec($command);

// Facoltativo: visualizza l'output o gli errori (per il debug)
if ($output) {
   echo "Output di errore: " . $output;
} else {
   echo "Conversione avviata con successo.";
}

?>

Importante

La funzione shell_exec() esegue comandi di shell direttamente sul server. Assicurati sempre che nessun input utente non filtrato (ad esempio, nomi di file da un modulo di caricamento) sia inserito direttamente nel comando, per evitare falle di sicurezza come la command injection. Utilizza funzioni come escapeshellarg() per proteggere i percorsi dei file.