如何在Python中在图像上写文本并叠加另一张图像?
我想在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