2011-11-16 26 views
8

我需要將一些文本放在Python中的PNG圖像上,我需要在第一個圖像上放置另一個圖像。所以我會有一個基礎圖像(每個圖像創建相同),一個標誌放在左上角,一個文字遍佈圖像(非特定字體,我只需要設置字體大小)。如何在Python中將文本寫在圖像上並覆蓋其上的另一圖像?

我可以使用PIL或其他庫嗎?

我搜索了StackOverflow和Google,但我找不到提示如何做到這一點。

謝謝。

回答

17

PIL可以做到這一點:

import PIL 
from PIL import ImageFont 
from PIL import Image 
from PIL import 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

+0

在你的代碼,還有即將平局= ImageDraw.Draw(IMG)兩條線,我認爲,第二個是沒有必要的。 –

2

我覺得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/