使用python pil库将图像逐渐淡化至透明度 我已经研究了教程,其他Stackoverflow问题和PIL文档本身,但我仍然不确定如何做。 我想开始近似垂直褪色的图像...

问题描述 投票:0回答:4

可行

LLET假设您是从没有透明度的图像开始的(因为否则,您的问题是模棱两可的)。

步骤1:添加一个alpha平面。只是

putalpha
python png transparency python-imaging-library
4个回答
7
投票
,除非您要处理非平面图像,在这种情况下,您需要先将其转换为RGB或L。

步长2:通过使用

load

返回的像素阵列(如果必须处理古代版本的PIL)来更改您要更改的像素。 步骤3:没有步骤3。除非计算保存图像。在这种情况下,好的,步骤3正在保存图像。

getpixel
alpha在255上线性下降到0;它希望它根据不同的曲线下降,或者使用RGB16而不是RGB8,或者使用L而不是RGB,您应该能够弄清楚如何更改它。

如果您想更快地执行此操作,则可以使用numpy代替步骤2的python循环。或者您可以将步骤1和2逆转 - 提前构造一个alpha平面,并通过将其传递给setpixel

而不是
from PIL import Image im = Image.open('bird.jpg') im.putalpha(255) width, height = im.size pixels = im.load() for y in range(int(height*.55), int(height*.75)): alpha = 255-int((y - height*.55)/height/.20 * 255) for x in range(width): pixels[x, y] = pixels[x, y][:3] + (alpha,) for y in range(y, height): for x in range(width): pixels[x, y] = pixels[x, y][:3] + (0,) im.save('birdfade.png')
putalpha
来立即应用。或者……由于这在我周围最大的图像上花了不到半秒的时间,所以我不太担心性能,除非您必须做一百万,并且想要更快的版本。

使用numpy:

255
    

如果您想淡入已经具有透明背景(
detail

)的图像,则必须更改

@abarnert
的代码:
import numpy as np
import Image

img = Image.open(FILENAME).convert('RGBA')
arr = np.array(img)
alpha = arr[:, :, 3]
n = len(alpha)
alpha[:] = np.interp(np.arange(n), [0, 0.55*n, 0.75*n, n], [255, 255, 0, 0])[:,np.newaxis]
img = Image.fromarray(arr, mode='RGBA')
img.save('/tmp/out.png')


3
投票

使用

from PIL import Image im = Image.open('bird.jpg') width, height = im.size pixels = im.load() for y in range(int(height*.55), int(height*.75)): for x in range(width): alpha = pixels[x, y][3]-int((y - height*.55)/height/.20 * 255) # change made here if alpha <= 0: alpha = 0 pixels[x, y] = pixels[x, y][:3] + (alpha,) for y in range(y, height): for x in range(width): pixels[x, y] = pixels[x, y][:3] + (0,) bg.save('birdfade.png')
我们可以生成梯度并将其设置为alpha通道:

0
投票

0
投票

图像


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.