2016-10-04 4 views
0

мне нужно добавить прозрачный градиент к изображению, как на изображении ниже, я попытался это:Python Подушка: Добавить прозрачный градиент к изображению

def test(path): 
    im = Image.open(path) 
    if im.mode != 'RGBA': 
     im = im.convert('RGBA') 
    width, height = im.size 
    gradient = Image.new('L', (width, 1), color=0xFF) 
    for x in range(width): 
     gradient.putpixel((0 + x, 0), x) 
    alpha = gradient.resize(im.size) 
    im.putalpha(alpha) 
    im.save('out.png', 'PNG') 

Но с этим я добавил только белый градиент. Как изменить цвет градиента и контролировать размер градиента.

Мне нужно следующее, но без текста.

this

ответ

2

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

def test(path): 
    im = Image.open(path) 
    if im.mode != 'RGBA': 
     im = im.convert('RGBA') 
    width, height = im.size 
    gradient = Image.new('L', (width, 1), color=0xFF) 
    for x in range(width): 
     gradient.putpixel((x, 0), 255-x) 
    alpha = gradient.resize(im.size) 
    black_im = Image.new('RGBA', (width, height), color=0) # i.e. black 
    black_im.putalpha(alpha) 
    gradient_im = Image.alpha_composite(im, black_im) 
    gradient_im.save('out.png', 'PNG') 

EDIT

Существуют различные способы, чтобы масштабировать градиент. Ниже приведено одно предложение.

def test(path, gradient_magnitude=1.): 
    im = Image.open(path) 
    if im.mode != 'RGBA': 
     im = im.convert('RGBA') 
    width, height = im.size 
    gradient = Image.new('L', (width, 1), color=0xFF) 
    for x in range(width): 
     # gradient.putpixel((x, 0), 255-x) 
     gradient.putpixel((x, 0), int(255 * (1 - gradient_magnitude * float(x)/width))) 
    alpha = gradient.resize(im.size) 
    black_im = Image.new('RGBA', (width, height), color=0) # i.e. black 
    black_im.putalpha(alpha) 
    gradient_im = Image.alpha_composite(im, black_im) 
    gradient_im.save('out.png', 'PNG') 
+0

Спасибо. Кажется, это работает. Но как я могу контролировать размер градиента? Мне не нужен градиент при полном размере изображения. – saa

+0

Извините, я пропустил gradient_magnitude, кажется, все в порядке, я должен играть с ним больше. Благодаря! – saa

+0

Возможно, вы знаете. Как добавить дополнительную непрозрачность? Просто на левой стороне он очень черный. – saa