Подтвердить что ты не робот

Как инвертировать цвета изображения с помощью PIL (Python-Imaging)?

Мне нужно преобразовать серию изображений, нарисованных как белые на черном фоне буквы на изображения, где белые и черные инвертированы (как отрицательные). Как я могу достичь этого с помощью PIL?

4b9b3361

Ответ 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')