2013-09-24 2 views
2

Я добавил некоторый текст над изображением, используя PILText Shadow с 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 формате с начальным альфа набора полностью прозрачным,
  2. добавить свой текст это как с текстом alpha, установленным на полный непрозрачный,
  3. возьмите копию текстового слоя,
  4. сдвиньте его по направлению тени,
  5. масштабируйте его по шкале тени,
  6. замените цвет вашего текста теневым цветом , который имеет альфа для плотности тени.
  7. затем слить/вставить тень на исходное изображение
  8. с последующим слиянием/вставкой на текстовом слое.