Comment obtenir la valeur alpha d'une image PNG avec PIL?
Comment détecter si une image PNG transparente a canal alpha ou non à l'aide de PIL?
img = Image.open('example.png', 'r')
has_alpha = img.mode == 'RGBA'
Avec le code ci-dessus, nous savons qu'une image PNG a canal alpha ne sont pas pas mais comment obtenir la valeur alpha?
Je n'ai pas trouvé une "transparence" clé en img.info dictionnaire tel que décrit à PIL site web
Je suis sous Ubuntu et zlib1g, zlibc paquets sont déjà installés.
Vous devez vous connecter pour publier un commentaire.
Pour obtenir la couche alpha d'une image RGBA tout ce que vous devez faire est de:
ou
Et il y a une méthode pour définir la couche alpha:
La transparence clé est uniquement utilisé pour définir la transparence d'index dans la palette du mode (P). Si vous souhaitez couvrir la palette du mode de transparence cas et de couvrir tous les cas vous pouvez faire cela
Remarque: Le convertir méthode est nécessaire lorsque l'image.le mode est LA, en raison d'un bogue dans la LIP.
Vous pouvez obtenir les données alpha de toute l'image en une seule fois, par la conversion d'image en corde avec Un " a " en mode électronique.g cet exemple obtenir des données alpha de l'image et l'enregistre comme une échelle de gris de l'image 🙂
La
img.info
est sur l'ensemble d'une image -- l'alpha-valeur dans une image RGBA est par pixel, alors, évidemment, il ne sera pas dansimg.info
. Legetpixel
méthode de l'objet image, étant donné un système de coordonnées comme argument, retourne un tuple avec les valeurs de l' (quatre, dans ce cas) bandes pour que pixel -- le tuple de la dernière valeur sera alors Un, la valeur alpha.getpixel
sera vraiment lent. Vous devez utilisergetdata
ouload
pour de hautes performances d'accès.J'ai essayé ceci:
Cette retourné le résultat que j'attendais. Cependant, j'ai fait quelques calculs pour déterminer la moyenne et l'écart type, et les résultats sont légèrement différents de imagemagick
fx:mean
fonction.Peut-être la conversion changé certaines valeurs? Je n'en suis pas sûr, mais il semble relativement trivial.