2011-11-16 3 views
8

Ho bisogno di mettere del testo su un'immagine PNG in Python, ho bisogno di mettere un'altra immagine anche sulla prima.Come posso scrivere del testo su un'immagine e sovrapporvi un'altra immagine, in Python?

Quindi avrò un'immagine di base (la stessa per ogni immagine creata), un logo da mettere sopra nell'angolo in alto a sinistra e un testo su tutta l'immagine (carattere non specifico, ho solo bisogno di imposta la dimensione del carattere).

Posso utilizzare PIL o un'altra libreria?

Ho cercato su StackOverflow e Google, ma non sono riuscito a trovare suggerimenti su come farlo.

Grazie.

risposta

17

PIL può farlo:

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

L'unico errore che può verificarsi non è quello di trovare il font. In questo caso è necessario modificare la riga di codice:

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

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

+0

Nei vostri codici, Ci sono due linee su Draw = ImageDraw.Draw (IMG), credo, la seconda non è necessario . –

2

Penso OpenCV è più facile da usare:

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

Nota che l'immagine originale può essere modificata, in modo da aggiungere np.copy per proteggerlo. Maggiori dettagli sulla funzione è http://docs.opencv.org/2.4.8/modules/core/doc/drawing_functions.html?highlight=puttext#cv2.putText

Il fontface può essere definito https://codeyarns.com/2015/03/11/fonts-in-opencv/