Python Pillow:为图像添加透明渐变

Python Pillow: Add transparent gradient to an image

我需要为图像添加透明渐变,如下图所示,我试过这个:

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

但是我只添加了白色渐变。如何更改渐变的颜色和控制渐变的大小。

我需要如下但没有文字。

您的代码确实按照它说的去做。但是,如果您的图像背景不是黑色而是白色,则图像会显得更亮。以下代码将原始图像与黑色图像合并,这样无论背景如何,您都可以获得深色渐变效果。

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

编辑

缩放渐变有多种方法。以下是一个建议。

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