如何在Python上编写文本,并在其上覆盖另一个图像?

时间:2011-11-16 16:10:43

标签: python png python-imaging-library

我需要在Python中将一些文本放在PNG图像上,我需要在第一个图像上放置另一个图像。

所以我将有一个基本图像(对于每个创建的图像都相同),在左上角放置一个徽标,在整个图像上放置一个文本(非特定字体,我只需要设置字体大小)。

我可以使用PIL或其他图书馆吗?

我也搜索过StackOverflow和Google,但我找不到有关如何执行此操作的提示。

感谢。

3 个答案:

答案 0 :(得分:19)

PIL可以做到:

from PIL import Image, ImageFont, ImageDraw
font = ImageFont.truetype("/usr/share/fonts/dejavu/DejaVuSans.ttf", 25)
img = Image.new("RGBA", (200,200), (120,20,20))
draw = ImageDraw.Draw(img)
draw.text((0,0), "This is a test", (255,255,0), font=font)
draw = ImageDraw.Draw(img)
img.save("a_test.png")

唯一可能发生的错误是找不到字体。 在这种情况下,您必须更改代码行:

font = ImageFont.truetype("/usr/share/fonts/dejavu/DejaVuSans.ttf",25)

来源:http://python-catalin.blogspot.com/2010/06/add-text-on-image-with-pil-module.html

答案 1 :(得分:4)

我认为opencv更易于使用:

import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread('xxx.png')  
texted_image =cv2.putText(img=np.copy(image), text="hello", org=(200,200),fontFace=3, fontScale=3, color=(0,0,255), thickness=5)
plt.imshow(texted_image)
plt.show()

请注意,原始图片可能会更改,因此我添加了np.copy来保护它。 关于该功能的更多细节是http://docs.opencv.org/2.4.8/modules/core/doc/drawing_functions.html?highlight=puttext#cv2.putText

fontFace可以引用https://codeyarns.com/2015/03/11/fonts-in-opencv/

答案 2 :(得分:2)

PIL是一种方法。您还可以查看ImageMagick,它还支持compositing images并添加text into images(以及许多其他内容)。

通过PythonMagick到ImageMagick有一个python接口。