【发布时间】:2026-01-21 20:50:01
【问题描述】:
我有一段代码,它接受一个字符串并从该字符串构造一个类似涂鸦的图像。这些字母都是单独的 .PNG 图像,它们被读入并粘贴到一个新的、更长的图像上。我的问题是,虽然实际上保留了背景 alpha 通道,但字母重叠的地方却没有。请看图片。
如何在保留 Alpha 通道的同时粘贴这些重叠的字母?似乎 alpha_composite 和 blend 函数都需要相同的图像才能工作。
需要注意的是,我可以在 Python 或 C++ 中执行此操作,我现在只是使用 python,因为它看起来非常快速和简单。
问题图片
一封原信
编辑:这是代码。肯定有更好的方法来做到这一点。
import sys
from PIL import Image
def openLetters(letters):
files = {
'A': 'A-rens.png',
'B': 'B-rens.png',
'C': 'C-rens.png',
'D': 'D-rens.png',
'E': 'E-rens.png',
'F': 'F-rens.png',
'G': 'G-rens.png',
'H': 'H-rens.png',
'I': 'I-rens.png',
'J': 'J-rens.png',
'K': 'K-rens.png',
'L': 'L-rens.png',
'M': 'M-rens.png',
'N': 'N-rens.png',
'O': 'O-rens.png',
'P': 'P-rens.png',
'Q': 'Q-rens.png',
'R': 'R-rens.png',
'S': 'S-rens.png',
'T': 'T-rens.png',
'U': 'U-rens.png',
'V': 'V-rens.png',
'W': 'W-rens.png',
'X': 'X-rens.png',
'Y': 'Y-rens.png',
'Z': 'Z-rens.png',
}
images = []
for letter in letters:
images.append(Image.open(files[letter]))
print "Opened:" + files[letter]
widths, heights = zip(*(i.size for i in images))
totalWidth = sum(widths)
maxHeight = max(heights)
newImage = Image.new('RGBA', (totalWidth, maxHeight))
x_offset = 0
for im in images:
newImage.paste(im, (x_offset, 0), mask=0)
x_offset += im.size[0] - 200
newImage.save(letters + ".png")
openLetters("ANDERS")
【问题讨论】:
-
请分享一些单个字母的图像以及您的代码。
-
根据您的图片,单个字母 ping 似乎缺乏透明度,需要一些后期处理才能获得。切换到 C++ 在这里不太可能有帮助。
-
是的,看起来您只需要将每个字母视为单独的 PNG 图像,就可以添加 alpha 层。然后他们应该粘贴好。在 python 中最容易完成。 Holler 和我会给你一个 python 片段来简单地在 png 上添加/修改 alpha 层来实现这个目的。
-
我已经编辑了帖子并包含了我使用的代码。
-
David Kierans:我很想看看 Python 代码,但是我怎么给你发消息呢?这个网站没有PM功能吧?
标签: python python-imaging-library transparency alpha