Python PIL 降低 alpha 级别,但不更改透明背景

Posted

技术标签:

【中文标题】Python PIL 降低 alpha 级别,但不更改透明背景【英文标题】:Python PIL reduce alpha level, but do not change transparent background 【发布时间】:2021-03-26 23:18:22 【问题描述】:

我想让图像的可见部分更透明,但也不改变全透明背景的 alpha 级别。

这是图片:

我是这样做的:

from PIL import Image
img = Image.open('image_with_transparent_background.png')
img.putalpha(128)
img.save('half_transparent_image_with_preserved_background.png')

这是我得到的:half_transparent_image_with_preserved_background.png

如何在不改变背景的情况下准确实现我想要的?

【问题讨论】:

我的回答解决了您的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步为您提供帮助。谢谢。 meta.stackexchange.com/questions/5234/… 【参考方案1】:

我认为您想在当前非零的任何地方制作 alpha 128:

from PIL import Image

# Load image and extract alpha channel
im = Image.open('moth.png')
A = im.getchannel('A')

# Make all opaque pixels into semi-opaque
newA = A.point(lambda i: 128 if i>0 else 0)

# Put new alpha channel back into original image and save
im.putalpha(newA)
im.save('result.png')


如果您更愿意使用 Numpy 来做这件事,您可以这样做:

from PIL import Image
import numpy as np

# Load image and make into Numpy array
im = Image.open('moth.png')
na = np.array(im)

# Make alpha 128 anywhere is is non-zero
na[...,3] = 128 * (na[...,3] > 0)

# Convert back to PIL Image and save
Image.fromarray(na).save('result.png')

【讨论】:

我已经尝试过您的示例,似乎可以工作.. 唯一的问题是质量,在 512x512 中它会像素化很多

以上是关于Python PIL 降低 alpha 级别,但不更改透明背景的主要内容,如果未能解决你的问题,请参考以下文章

python_PIL图片拼接,符合需求但不完美!!

Python PIL 0.5 不透明度、透明度、阿尔法

如何绘制透明多边形?

python PIL相关操作

python PIL(pillow)图像处理-图片上添加文字

PIL