2013-09-24 129 views
2

我增加了一些文字上使用PIL文字阴影使用Python

我想添加一个文本阴影,具有一定的阴影半径和阴影不透明度的图像。

在绘制一些文本之前,我已经能够通过绘制阴影来伪造这一点(它不工作太好),然后将其放置在文本上方一点。

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 

但是,这样的方法不允许阴影半径,不透明CSS样式属性。

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

回答

7

看看这些例子。

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. 创建RGBA格式与最初的Alpha设置为完全透明的新形象/层,
  2. 您的文本添加到它与文本alpha设置为完全不透明一样,
  3. 取文本层的副本,
  4. 将其移向阴影方向,
  5. 通过影子比例因子缩放它,
  6. 用阴影颜色替换文本的颜色,该影子的阴影密度为
  7. 然后将阴影合并/粘贴到原始图像
  8. 然后在文本图层上合并/粘贴。