Подушка Python изменяет значение RGB в пикселях?

#python #colors #rgb #pillow

#питон #Цвет #rgb #подушка

Вопрос:

Я пытаюсь изменить пиксели на моем изображении на более темный зеленый, чем я уже сделал, я пытаюсь добавить к нему rgb (0,50,0), но, похоже, я не могу этого сделать, не могли бы вы помочь? Я ввел свой код ниже, и freljord2.png теперь представляет собой просто полное зеленое изображение с использованием getcolor(зеленый, «RGBA»).

 im = Image.open('freljord2.png')
#one_pixel = im.getpixel((0, 0))
#one_pixel[1] = 0;
#im.save('freljord3.png')


(0, 0, 0, 0)
for x in range(0):
for y in range(0):
    im.putpixel((x, y), (210, 210, 210))
for x in range(560):
    for y in range(557):
    print("hi")
    hello = ImageColor.get(00B200)
    im.putpixel((x, y), )
im.getpixel((0, 0))
(210, 210, 210, 255)
im.getpixel((0, 50))
(169, 169, 169, 255)
im.save('freljord2.png')
 

Комментарии:

1. Можете ли вы исправить свой отступ в вашем примере кода? Это очень важно в Python. 🙂

Ответ №1:

Вы упоминаете, что хотите сделать свое изображение более темно-зеленым, но если вы добавите 50 к каждому значению пикселя изображения, вы только сделаете его ярче (и зеленее). Что вы хотите сделать, это поместить зеленое прозрачное наложение поверх существующего изображения. Для этого вы должны создать новое изображение того же размера, что и оригинал, с цветом, который вы хотите добавить, и значением альфа, которое указывает, насколько оно прозрачно. Затем вам нужно вставить это изображение поверх исходного изображения, используя маску.

Следующий пример кода должен сделать свое дело. Результат показан ниже. Вы можете немного поиграть со значениями, чтобы адаптировать их к вашим потребностям.

 '''
Created on Oct 23, 2016

@author: physicalattraction
'''

import os.path
from PIL import Image


def get_img_dir() -> str:
    '''
    Return the full path to the image directory

    :return: string
    '''
    pkg_dir = os.path.dirname(__file__)
    img_dir = os.path.join(pkg_dir, '..', '..', 'img')
    return img_dir


def open_img(img_name: str) -> Image:
    '''
    Open the given file form the image directory

    :param img_name: Name including extension of the image
    :return: Image object
    '''
    img_dir = get_img_dir()
    full_img_path = os.path.join(img_dir, img_name)
    return Image.open(full_img_path)


def save_img(img: Image, img_name: str):
    '''
    Save the given image to the image directory

    :param img: Image object
    :param img_name: Name including the extension of the image
    '''
    img_dir = get_img_dir()
    full_img_path = os.path.join(img_dir, img_name)
    img.save(full_img_path)


def overlay(img: Image, overlay_color: tuple):
    '''
    Place an overlay over an existing image

    :param img: Image opened with PIL.Image
    :param overlay_color: four-tuple with color to add to your image
    '''
    assert len(overlay_color) == 4, 'Overlay color shall be a 4-tuple'

    img_overlay = Image.new(size=img.size, color=overlay_color, mode='RGBA')
    img.paste(img_overlay, None, mask=img_overlay)

    color_string = '_'.join([str(c) for c in overlay_color])
    filename = 'amsterdam_{color}.jpg'.format(color=color_string)
    save_img(img, filename)


if __name__ == '__main__':
    ams = open_img('amsterdam.jpg')
    green = (0, 50, 0, 128)
    overlay(ams, green)
 

Исходное изображение:

Оригинальное изображение Амстердама

Темно-зеленое изображение:

Более темное зеленое изображение