CodeGym /Cours Java /Python SELF FR /Travailler avec le canal alpha et la transparence

Travailler avec le canal alpha et la transparence

Python SELF FR
Niveau 46 , Leçon 1
Disponible

1. Création d'images avec un canal alpha

Le format RGBA (Red, Green, Blue, Alpha) est une extension du format standard RGB, incluant un canal alpha pour gérer la transparence. Les images dans ce format permettent d’appliquer des effets de transparence.

Charger une image avec un canal alpha

Lors du chargement d’une image PNG qui prend en charge la transparence, Pillow détecte automatiquement le canal alpha.


from PIL import Image

# Ouverture d'une image avec un canal alpha
image = Image.open("transparent_image.png")
print(image.mode)  # Doit afficher 'RGBA' pour les images avec canal alpha

Si l'image contient déjà un canal alpha, elle sera ouverte au format RGBA. Sinon, elle peut être convertie à l'aide de convert().

Convertir une image au format RGBA

Si une image ne dispose pas d’un canal alpha, il peut être ajouté en convertissant l’image en mode RGBA.


# Conversion de l'image au format RGBA
image = image.convert("RGBA")

2. Création d’un fond transparent

Parfois, il est nécessaire de créer une image avec un fond totalement transparent sur lequel on peut dessiner ou ajouter d'autres éléments. Pour cela, on crée une nouvelle image en mode RGBA en la remplissant avec une couleur totalement transparente.


# Création d'une image avec un fond transparent
transparent_image = Image.new("RGBA", (500, 500), (255, 255, 255, 0))
transparent_image.save("transparent_background.png")

Dans cet exemple, une image de 500x500 pixels avec un fond transparent est créée. La couleur (255, 255, 255, 0) correspond à la couleur blanche avec un alpha de 0 (totalement transparent).

3. Appliquer la transparence à une image

Parfois, on souhaite modifier la transparence d'une image entière. Cela peut être fait avec la méthode putalpha(), qui permet de gérer la transparence de chaque pixel.

Définir le niveau de transparence pour une image

La méthode putalpha() permet de définir le niveau de transparence pour une image entière. La valeur du canal alpha peut varier de 0 (totalement transparent) à 255 (totalement opaque).


# Définir le niveau de transparence pour toute l'image
image.putalpha(128)  # Rend l'image semi-transparente
image.save("semi_transparent_image.png")

Ce code rend l'image semi-transparente en fixant la valeur du canal alpha à 128 (la moitié de 255).

4. Application de masques pour la transparence

Un masque est une image en noir et blanc où les zones blanches (valeur 255) sont entièrement visibles et les zones noires (valeur 0) sont totalement transparentes. Les valeurs entre 0 et 255 créent un dégradé de transparence.

Appliquer un masque à une image


# Chargement de l'image et du masque
image = Image.open("foreground.png").convert("RGBA")
mask = Image.open("mask.png").convert("L")  # Masque en niveaux de gris

# Appliquer le masque pour la transparence
image.putalpha(mask)
image.save("masked_image.png")

Dans cet exemple, le masque mask.png est appliqué à l'image foreground.png. Les zones blanches du masque rendent l'image entièrement visible, les zones noires la rendent transparente et les zones grises la rendent semi-transparente.

5. Superposition d'images en tenant compte de la transparence

Pillow permet de superposer une image sur une autre en tenant compte du canal alpha. C’est pratique pour créer des effets de superposition et combiner des images.

Superposer une image sur une autre

Supposons que nous ayons une image d’arrière-plan et une image avec des zones transparentes que nous souhaitons superposer sur le fond.


# Chargement de l'image de fond et de l'image à superposer
background = Image.open("background.jpg").convert("RGBA")
overlay = Image.open("overlay.png").convert("RGBA")

# Superposition de overlay sur background aux coordonnées (50, 50)
background.paste(overlay, (50, 50), overlay)

# Sauvegarde du résultat
background.save("overlay_result.png")

Ici, overlay est l'image avec transparence qui est superposée sur background aux coordonnées (50, 50). L'utilisation du troisième argument (image comme masque) lors de l'appel de paste() permet de prendre en compte les zones transparentes lors de la superposition.

6. Contrôle précis du canal alpha

Pour gérer plus en détail la transparence de chaque pixel, on peut utiliser les méthodes putpixel() et getpixel(), qui permettent de modifier la transparence au niveau de chaque pixel.

Exemple : Modifier la transparence de certains pixels


# Ouvrir une image en mode RGBA
image = Image.open("example.png").convert("RGBA")

# Modifier la transparence des pixels dans la partie supérieure de l'image
width, height = image.size
for x in range(width):
    for y in range(int(height / 2)):  # Moitié supérieure
        r, g, b, a = image.getpixel((x, y))
        image.putpixel((x, y), (r, g, b, int(a * 0.5)))  # Pixel semi-transparent

image.save("pixel_transparency_example.png")

Ce code rend la moitié supérieure de l’image semi-transparente. On utilise getpixel() pour obtenir la valeur des couleurs de chaque pixel, puis on modifie le canal alpha et on réenregistre le pixel modifié avec putpixel().

7. Exemples

Exemple complet de travail avec le canal alpha et la transparence

Regroupons toutes les méthodes et créons une image avec un fond transparent, sur laquelle on superpose du texte et des éléments graphiques semi-transparents.


from PIL import Image, ImageDraw, ImageFont

# Création d'une image avec un fond transparent
image = Image.new("RGBA", (500, 500), (255, 255, 255, 0))
draw = ImageDraw.Draw(image)

# Dessiner un rectangle semi-transparent
draw.rectangle((50, 50, 450, 150), fill=(255, 0, 0, 128))  # Rouge avec 50% de transparence

# Dessiner un cercle semi-transparent
draw.ellipse((50, 200, 450, 400), fill=(0, 0, 255, 128))  # Bleu avec 50% de transparence

# Ajouter du texte avec transparence
font = ImageFont.truetype("arial.ttf", 36)
draw.text((100, 50), "Hello, World!", font=font, fill=(255, 255, 255, 128))

# Sauvegarde du résultat
image.save("alpha_channel_example.png")

Cet exemple crée une image avec un fond transparent, un rectangle rouge semi-transparent, un cercle bleu et du texte avec transparence. Cette méthode est utile pour créer des images esthétiques avec des éléments se superposant au fond.

Applications pratiques de la transparence et du canal alpha

  1. Création de logos et filigranes : Le canal alpha permet de rendre les logos et filigranes semi-transparents, ce qui les rend discrets mais visibles.
  2. Design d'interfaces : Les éléments transparents sont souvent utilisés pour des superpositions et des boutons dans les interfaces.
  3. Collages et compositions : La gestion de la transparence permet de créer des compositions complexes où les images peuvent se chevaucher en douceur.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION