Skip to content

Créer une image png transparente avec Python, Pillow (putalpha)

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')

avec

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')

putalpha en python solide Coussin

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)

Cercle Alpha de Python Oreiller

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')

Python Oreiller cercle putalpha

Vous pouvez utiliser ImageFilter pour lisser les limites.

im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4))

Cercle Alpha de Python Oreiller

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')

Python Oreiller cercle putalpha

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() ).

Oreiller python alpha cheval

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).

Python Oreiller alpha cheval inversé

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)

Python Oreiller alpha cheval inversé

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

Oreiller de cheval Python putalpha