
Le module image de Python’s Pillow Image Processing Library (PIL) fournit putalpha() pour ajouter un canal alpha à une image.
Cet article décrit le contenu suivant.
- Comment utiliser Image.putalpha()
- Définir une transparence uniforme sur toute la surface
- Créer un canal alpha avec ImageDraw
- Utiliser l’image existante comme canal alpha
Consultez l’article suivant pour l’installation et l’utilisation de base de Pillow (PIL).
Importez l’image PIL et chargez l’image d’origine.
ImageDraw et ImageFilter sont utilisés pour dessiner des formes et créer des canaux alpha. Ils peuvent être ignorés si le fichier image est lu et utilisé comme canal alpha.
from PIL import Image, ImageDraw, ImageFilter
im_rgb = Image.open('data/src/lena.jpg')

Comment utiliser Image.putalpha()
Le paramètre de putalpha() est juste alpha. Comme la couche du canal alpha est littéralement posée sur l’image d’origine.
Si le mode de l’image d’origine est RVB (8 bits x 3 : pleine couleur) ou L (8 bits x 1 : noir et blanc), un canal alpha est à nouveau ajouté, et s’il s’agit de RVBA ou LA, le canal est mis à jour . Alpha d’origine.
Spécifié par une constante
Lorsqu’une valeur entière de 8 bits (0 à 255) est définie sur alpha, la transmission en fonction de la valeur est définie sur toute la surface.
0 signifie 100 % de transparence, 255 signifie 0 % de transparence (pas de transparence).
Spécifié par l’objet image
Si vous définissez un objet Image de la même taille que l’image d’origine en mode= »L » (niveaux de gris 8 bits) sur alpha, vous pouvez définir le canal alpha de plusieurs manières.
Comme dans le cas constant, 0 signifie 100 % de transparence, 255 signifie 0 % de transparence (pas de transparence).
Définir une transparence uniforme sur toute la surface
Si vous définissez une valeur entière sur alpha, la transparence en fonction de la valeur sera définie sur toute la surface.
Notez que putalpha() écrase l’image d’origine, donc si vous voulez conserver l’image d’origine telle quelle, utilisez celle que vous avez copiée avec copy().
im_rgba = im_rgb.copy()
im_rgba.putalpha(128)
im_rgba.save('data/dst/pillow_putalpha_solid.png')

Dans cet exemple, alpha=128 donne environ 50 % de transparence (128/255 ~ 50 %).
Créer un canal alpha avec ImageDraw
Si vous souhaitez ajouter un canal alpha avec une forme simple, comme un cercle ou un rectangle, le dessin dans le module ImageDraw est utile. Pour plus d’informations sur le dessin, consultez l’article suivant. Vous pouvez également dessiner des polygones.
Dessinez un cercle blanc sur fond noir et réglez-le sur le canal alpha.
im_a = Image.new("L", im_rgb.size, 0)
draw = ImageDraw.Draw(im_a)
draw.ellipse((140, 50, 260, 170), fill=255)

im_rgba = im_rgb.copy()
im_rgba.putalpha(im_a)
im_rgba_crop = im_rgba.crop((140, 50, 260, 170))
im_rgba_crop.save('data/dst/pillow_putalpha_circle.png')

Vous pouvez utiliser ImageFilter pour lisser les limites.
im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4))

im_rgba = im_rgb.copy()
im_rgba.putalpha(im_a_blur)
im_rgba_crop = im_rgba.crop((135, 45, 265, 175))
im_rgba_crop.save('data/dst/pillow_putalpha_circle_blur.png')

Dans chaque exemple, l’extérieur du cercle est recadré en un rectangle avec crop(). Voir l’article suivant pour crop().
Utiliser l’image existante comme canal alpha
Vous pouvez charger une image existante et la définir comme canal alpha.
Essayez d’utiliser une image de cheval en noir et blanc (exemple d’image scikit : skimage.data.horse() ).

Dans cet exemple, pour créer l’image en forme de cheval, utilisez une image avec un cheval blanc et un fond noir (une image inversée).

Une fois que open() lit l’image, elle est redimensionnée à l’image collée par resize(), et le mode est converti en ‘L’ (niveaux de gris) par convert().
im_a = Image.open('data/src/horse_r.png').convert('L').resize(im_rgb.size)

im_rgba = im_rgb.copy()
im_rgba.putalpha(im_a)
im_rgba.save('data/dst/pillow_putalpha_horse.png')

