Как изменить цвет пикселя изображения с помощью PIL? - PullRequest
1 голос
/ 23 сентября 2019

Я хотел бы изменить пиксель, и по какой-то причине это не работает.

from PIL import Image
import numpy

im = Image.open("art\\PlanetX@1.25.png")
a = numpy.asarray(im)
img = Image.fromarray(a)
pixels = img.load()
pixels[0, 0] = (255, 0, 0, 255)

Что должно произойти, верхний левый угол PNG должен быть установлен как красный.Я получаю сообщение об ошибке ValueError: Image только для чтения.

1 Ответ

1 голос
/ 24 сентября 2019

Если вы хотите изменить только несколько нечетных пикселей, вы можете использовать довольно медленный putpixel(), например:

from PIL import Image

# Create blue 30x15 image
im = Image.new('RGB',(30,15),color='blue')

# Change single pixel at 10,0 to red
im.putpixel((10,0),(255,0,0))

enter image description here

Кроме того, вы можете преобразовать все изображение в массив Numpy и внести гораздо больше изменений, намного быстрее с помощью функций Numpy:

from PIL import Image
import numpy as np

# Create blue 30x15 image
im = Image.new('RGB',(30,15),color='blue')

# Convert to Numpy array
na = np.array(im)

# Change single pixel at 10,0 to green
na[0,10] = (0,255,0)

# Change whole row to red
na[3] = (255,0,0)

# Change whole column to yellow
na[:,8] = (255,255,0)

# Convert back to PIL Image and save
Image.fromarray(na).save('result.png')

enter image description here

...