Je dois convertir des séries d'images dessinées en blanc sur des lettres à fond noir en images où le blanc et le noir sont inversés (en tant que négatifs). Comment puis-je atteindre cet objectif en utilisant PIL?
Essayez ce qui suit dans la documentation: http://effbot.org/imagingbook/imageops.htm
from PIL import Image
import PIL.ImageOps
image = Image.open('your_image.png')
inverted_image = PIL.ImageOps.invert(image)
inverted_image.save('new_name.png')
Remarque: "Le module ImageOps contient un certain nombre d'opérations de traitement d'image" prédéfinies ". Ce module est quelque peu expérimental et la plupart des opérateurs ne fonctionnent que sur des images L et RGB.
Si l'image est RGBA transparente, cela échouera ... Cela devrait fonctionner si:
from PIL import Image
import PIL.ImageOps
image = Image.open('your_image.png')
if image.mode == 'RGBA':
r,g,b,a = image.split()
rgb_image = Image.merge('RGB', (r,g,b))
inverted_image = PIL.ImageOps.invert(rgb_image)
r2,g2,b2 = inverted_image.split()
final_transparent_image = Image.merge('RGBA', (r2,g2,b2,a))
final_transparent_image.save('new_file.png')
else:
inverted_image = PIL.ImageOps.invert(image)
inverted_image.save('new_name.png')
Pour ceux qui travaillent avec une image en mode "1" (pixels 1 bit, noir et blanc, stockés avec un pixel par octet - voir docs ), vous devez la convertir en mode "L" avant appeler PIL.ImageOps.invert
.
Ainsi:
im = im.convert('L')
im = ImageOps.invert(im)
im = im.convert('1')
Dans le cas où quelqu'un inverserait une image CMYK
, les implémentations actuelles de PIL et de Pillow ne semblent pas prendre en charge cela et renvoient une erreur. Cependant, vous pouvez facilement contourner ce problème en inversant les bandes individuelles de votre image à l'aide de cette fonction pratique (essentiellement une extension du message de Greg Sadetsky ci-dessus):
def CMYKInvert(img) :
return Image.merge(img.mode, [ImageOps.invert(b.convert('L')) for b in img.split()])