如何在Python中在图像上写文本并叠加另一张图像?

10 投票
3 回答
34124 浏览
提问于 2025-04-17 06:27

我想在Python中把一些文字放在PNG图片上,还想在第一张图片上再放一张图片。

所以我会有一张基础图片(每次创建的图片都是这张),然后在左上角放一个logo,最后在整张图片上加一些文字(字体不固定,只需要设置字体大小)。

我可以使用PIL库,或者其他库吗?

我在StackOverflow和Google上查过,但没找到怎么做的建议。

谢谢。

3 个回答

1

PIL是一种处理图像的方法。你也可以看看ImageMagick,它同样支持合成图像和在图像中添加文字(还有很多其他功能)。

通过PythonMagick,你可以在Python中使用ImageMagick。

9

我觉得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

关于字体样式,可以参考这个链接:https://codeyarns.com/2015/03/11/fonts-in-opencv/

21

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)
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

撰写回答