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 la démonstration dans le fichier PDF 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...

Voir la démonstration du résultat dans le fichier PDF test-OK.pdf attaché à cette page.

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, par exemple, sous Linux :

Plus loin dans la transparence

Le masque est en niveau de gris :

  • La couleur noire dans le masque indique les zones de l'image associée à ne pas afficher.
  • La couleur blanche, les zones à afficher de façon opaque.
  • Le niveau de gris a aussi une signification, un gris de 20% indique qu'il faut fondre la zone avec les couleurs en arrière-plan en leurs laissant 20% d'intensité. Si l'arrière plan est totalement blanc, l'image va être atténuée, sinon on peut faire apparaître une image en arrière-plan comme dans l'exemple test-OK-20.pdf où le masque du logo PKG est défini pour une transparence de 20% de l'arrière-plan.
Last modified 16 years ago Last modified on Jan 20, 2008, 11:50:42 AM