2016-10-17 7 views
1

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

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') 
+0

Вы можете исправить ваш отступы в вашем образце кода? Это очень важно в Python. :-) – physicalattraction

ответ

0

Вы упоминаете, что вы хотите сделать свой образ более темно-зеленый, но если вы добавляете 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) 

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

Original Amsterdam image

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

Darker green image

Смежные вопросы