Version 1 (modified by guillaume, 16 years ago) (diff)

Création mini tutoriel PDF et transparence

Créer un document PDF avec des images utilisant la transparence avec TeX/LaTeX n'est parait-il pas possible...

Le problème par l'exemple

On place 2 images qui se superposent: le résultat ne convient pas car par défaut la transparence des images n'est pas restituée.

Voir le test-KO.pdf attaché à cette page.

Pourquoi ?

La commande pdflatex utilisée produit bien un PDF au format 1.4 supportant les transparences d'image, mais pdflatex ne sait pas comment prendre la transparence en compte...

La résolution

En fait, le support de la transparence dans le format PDF requiert l'association de l'image et d'un masque de transparence... Quézako ? Grossièrement, il faut donner une image supplémentaire correspondant au négatif de la transparence (en jargon technique, c'est le négatif du canal Alpha de l'image). Mais attention, ce masque doit absolument être dans un format en niveau de gris. Suivant les outils utilisés, on peut obtenir un masque en niveau de gris mais donné dans un espace de couleur RGB, là ça ne marche pas, car l'image est remplacée par un rectangle blanc...

Comment

  • Création du masque de transparence : par exemple avec l'outil convert fourni avec ImageMagick
    [guillaume ~]€ convert pkg.png -channel Alpha -negate -separate -type Grayscale mpkg.png
    [guillaume ~]€ file pkg.png mpkg.png
    pkg.png:  PNG image data, 122 x 123, 8-bit colormap, non-interlaced
    mpkg.png: PNG image data, 122 x 123, 16-bit grayscale, non-interlaced
    
    Remarque :
    • testé avec la version 6.3.5.9 sur Fedora 8
    • on peut aussi ajoûter l'option -depth 8 pour obtenir un masque plus léger et en niveau de gris de 8 bits
    • la version 5.6 sur RHEL3 ne supporte pas les options données ici

  • En TeX/LaTeX, on insère l'image en utilisant une option supplémentaire :
    • Normalement, on insère l'image de cette façon :
      \pdfximage{pkg.png}
      \pdfrefximage\pdflastximage}
      
    • Maintenant, il faut référencer le masque et insérer l'image avec une option attr comme dans l'exemple :
      \newcount\maskref
      \immediate\pdfximage{mpkg.png}
      \maskref=\pdflastximage
      \pdfximage attr {/SMask \the\maskref\space 0 R} {pkg.png}
      \pdfrefximage\pdflastximage}
      
      Remarque : la directive \immediate est indispensable sinon le masque n'est pas inséré dans le PDF car il n'est pas directement utilisé avec une directive \pdfrefximage

  • Utiliser la commande pdflatex normalement