Мне нужно преобразовать серию изображений, нарисованных как белые на черном фоне буквы на изображения, где белые и черные инвертированы (как отрицательные). Как я могу достичь этого с помощью PIL?
Как инвертировать цвета изображения с помощью PIL (Python-Imaging)?
Ответ 1
Попробуйте следующее из документов: 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')
Примечание: "Модуль ImageOps содержит ряд" готовых "операций обработки изображений. Этот модуль несколько экспериментальный, и большинство операторов работают только с изображениями L и RGB.
Ответ 2
Если изображение RGBA прозрачно, это не сработает... Это должно работать, хотя:
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')
Ответ 3
Для тех, кто работает с изображением в режиме "1" (т.е. 1-битные пиксели, черно-белые, сохраненные с одним пикселем на байт - см. docs), вы должны преобразовать его в режим "L" перед вызовом PIL.ImageOps.invert
.
Таким образом:
im = im.convert('L')
im = ImageOps.invert(im)
im = im.convert('1')