How can I write text over an image, and overlay another image on it, in Python?
I think opencv is easier to use:
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()
Note that the original image may be changed, so I add np.copy
to protect it.
More details on the function is http://docs.opencv.org/2.4.8/modules/core/doc/drawing_functions.html?highlight=puttext#cv2.putText
The fontFace can be referred to https://codeyarns.com/2015/03/11/fonts-in-opencv/
PIL can do it:
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")
The only error that can occur is not to find the font. In this case you must change the code line:
font = ImageFont.truetype("/usr/share/fonts/dejavu/DejaVuSans.ttf",25)
Source: http://python-catalin.blogspot.com/2010/06/add-text-on-image-with-pil-module.html