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 级别,但不更改透明背景的主要内容,如果未能解决你的问题,请参考以下文章