文字阴影与Python

时间:2013-09-24 06:12:49

标签: python image python-imaging-library

我使用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-style属性。

有没有更好的方法用Python创建文本阴影?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:8)

看看这些例子。

Example 1

Example 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 :(得分:1)

你最好的选择是:

  1. RGBA 格式创建新图像/图层,初始Alpha设置为完全透明,
  2. 将文本添加到文本alpha设置为完全不透明
  3. 获取文本图层的副本
  4. 按阴影方向移动,
  5. 按阴影比例因子缩放,
  6. 使用阴影颜色替换文字颜色,阴影密度为
  7. 然后将阴影合并/粘贴到原始图像
  8. 然后合并/粘贴文本图层。