用Python实现文字阴影效果

4
我使用PIL在一张图片上添加了一些文字。
我想要添加一个文本阴影,包括特定的阴影半径和透明度。
我尝试模拟这个效果(不太成功),通过先画一个阴影,再画一些文本,并将其放在文本上方。
    draw.text((x, y + 2), text, font = some_font, fill = (208,208,208)) #shadow
    draw.text((x, y), text, font = some_font, fill = (255,255,255)) #text

然而,这种方法不允许使用shadow-radius、opacity等css样式属性。
是否有更好的方法用Python创建文本阴影?如果有,那么如何实现?
3个回答

8
请查看以下示例。

示例1

示例2

最后一个与您尝试的有些相似。

import Image, ImageFont, ImageDraw

import win32api, os

x, y = 10, 10

fname1 = "c:/test.jpg"
im = Image.open(fname1)
pointsize = 30
fillcolor = "red"
shadowcolor = "yellow"

text = "hi there"

font = win32api.GetWindowsDirectory() + "\\Fonts\\ARIALBD.TTF"
draw = ImageDraw.Draw(im)
font = ImageFont.truetype(font, pointsize)

# thin border
draw.text((x-1, y), text, font=font, fill=shadowcolor)
draw.text((x+1, y), text, font=font, fill=shadowcolor)
draw.text((x, y-1), text, font=font, fill=shadowcolor)
draw.text((x, y+1), text, font=font, fill=shadowcolor)

# thicker border
draw.text((x-1, y-1), text, font=font, fill=shadowcolor)
draw.text((x+1, y-1), text, font=font, fill=shadowcolor)
draw.text((x-1, y+1), text, font=font, fill=shadowcolor)
draw.text((x+1, y+1), text, font=font, fill=shadowcolor)

# now draw the text over it
draw.text((x, y), text, font=font, fill=fillcolor)

fname2 = "c:/test2.jpg"
im.save(fname2)

os.startfile(fname2)

1
添加一个3-5宽度的灰色阴影:
for i, j in itertools.product((-3, 0, -3), (-5, 0, 5)):
    PIL.ImageDraw.Draw(image).text((x + i, y + j), text, font=font, fill="gray")
PIL.ImageDraw.Draw(image).text((x, y), text, "white", font)

1
您最好的选择是按照以下步骤进行:
1. 使用完全透明的初始 alpha 创建一个新的 RGBA 格式图像/层, 2. 将文本添加到其中,文本 alpha 设置为完全不透明, 3. 复制文本层, 4. 按照阴影方向移动它, 5. 按照阴影比例因子缩放它, 6. 用具有阴影密度 alpha 的阴影颜色替换文本颜色。 7. 然后将阴影合并/粘贴到原始图像上, 8. 最后合并/粘贴文本层。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接