2016-10-17 101 views
1

我試圖將我的圖片上的像素更改爲比我已經制作的顏色更深的綠色,我正在嘗試向其添加+ rgb(0,50,0),但我似乎無法做到所以,你能幫忙嗎?我已經把我的代碼在下面,現在freljord2.png只是使用GETCOLOR(綠色,「RGBA」)Python枕頭更改像素的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,你只能讓它更亮(更綠)。你想要做的是在現有的圖像上放置一個綠色的透明覆蓋層。您應該爲您的原始圖像創建一個與您想要添加的顏色大小相同的新圖像,以及一個表示它的透明度的alpha值。接下來,您需要使用蒙版將該圖像粘貼到原始圖像上。

下面的代碼示例應該可以做到。結果如下所示。你可以隨身攜帶一些值來適應你的需求。

''' 
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