2013-09-24 131 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. 然後在文本圖層上合併/粘貼。