使用PIL绘制文本并不适用于所有图像

时间:2018-12-03 02:47:20

标签: python image-processing python-imaging-library

我正在尝试使用PIL在图像上绘制文本。但是,我只能在某些图像上看到文本。许多png无效,例如以下一种:

http://r0k.us/graphics/kodak/kodim16.html

代码示例:

import PIL
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
from os.path import expanduser


im1=Image.open(expanduser('~/Desktop/in.png'))

# Drawing the text on the picture
font = ImageFont.truetype('/Library/Fonts/Songti.ttc', 100)
draw = ImageDraw.Draw(im1)
draw.text((50, 600), 'OMG!', fill="#aa0000", font=font)
draw = ImageDraw.Draw(im1)

# Save the image with a new name
im1.save(expanduser('~/Desktop/out.png'))

我尝试添加.convert("RGBA")并将RGB用作颜色,但无济于事。

该代码适用于从我的iPhone拍摄的照片。但是,当我使用ImageMagick将这些iPhone照片转换为.jpg或.png时,代码再次停止工作。

此文字绘图功能仅适用于某些图像格式吗?

更新

我在.text()调用中添加了实际的文本位置。该代码适用于从iPhone提取的.png。

1 个答案:

答案 0 :(得分:1)

我认为您刚刚弄错了xy的坐标,并试图将512像素高的图像写入600像素:

#!/usr/bin/env python3

import PIL
from PIL import Image, ImageFont, ImageDraw

im1=Image.open('start.png')

# Drawing the text on the picture
font = ImageFont.truetype('/Library/Fonts/Herculanum.ttf', 100)
draw = ImageDraw.Draw(im1)
draw.text((50, 200), 'OMG!', (255,0,255), font=font)

# Save the image with a new name
im1.save('result.png')

enter image description here