Python Pillow - Modulo ImageDraw
Il ‘ImageDraw’fornisce un semplice supporto grafico 2D per Image Object. In generale, utilizziamo questo modulo per creare nuove immagini, annotare o ritoccare immagini esistenti e per generare grafici al volo per uso web.
I comandi grafici supportano il disegno di forme e l'annotazione del testo.
Un'immagine può essere ben pensata per essere una matrice bidimensionale di pixel (elementi dell'immagine). Un pixel è il punto di colore più piccolo supportato.
L'origine del sistema di coordinate bidimensionale utilizzato da ImageDraw è in upper left corner dell'immagine.
La combinazione di colori dei cuscini che utilizziamo è RGB. La rappresentazione e il supporto del colore RGB è fornito dal moduloImageColor.
bitmap, OpenType o TrueType sono i caratteri accettabili per le annotazioni di testo.
La maggior parte dei comandi di disegno può richiedere un parametro del riquadro di delimitazione che specifica l'area dell'immagine a cui deve essere applicato il comando.
Una sequenza di coordinate può essere rappresentata come [(x0, y0), (x1, y1),… (xn, yn)].
Per alcuni comandi di disegno, richiediamo valori angolari.
Esempio
Il seguente esempio di Python traccia una linea attraverso l'immagine data -
#Import required libraries
import sys
from PIL import Image, ImageDraw
#Create Image object
im = Image.open("images/logo.jpg")
#Draw line
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)
#Show image
im.show()
Produzione
Se salvi il programma sopra come Example.py ed esegui, disegna una linea sull'immagine e la visualizza utilizzando l'utilità di visualizzazione PNG standard, come segue:

Tela
Un ImageDraw è una superficie disegnabile Pillow (cioè una tela) di un'immagine.
ImageDraw.Draw (img) restituisce una rappresentazione su tela disegnabile del parametro Image img. Lo sfondo della tela è l'immagine "img".
Esempio
L'esempio seguente di Python disegna il testo sull'immagine data -
#Import required modules from Pillow package
from PIL import Image, ImageDraw, ImageFont
# get an image
base = Image.open('images/boy.jpg').convert('RGBA')
# make a blank image for the text, initialized to transparent text color
txt = Image.new('RGBA', base.size, (255,255,255,0))
# get a font
fnt = ImageFont.truetype('E:/PythonPillow/Fonts/Pacifico.ttf', 40)
# get a drawing context
d = ImageDraw.Draw(txt)
# draw text, half opacity
d.text((14,14), "Tutorials", font=fnt, fill=(255,255,255,128))
# draw text, full opacity
d.text((14,60), "Point", font=fnt, fill=(255,255,255,255))
out = Image.alpha_composite(base, txt)
#Show image
out.show()
Produzione

Disegnare forme utilizzando il modulo "ImageDraw"
Il modulo ImageDraw ci consente di creare forme diverse creando prima un oggetto di disegno con l'immagine con cui vuoi lavorare e poi applicandolo. Alcune delle forme comuni che possiamo disegnare usando il modulo 'ImageDraw' sono le seguenti:
Linea
Di seguito è riportata la sintassi per disegnare una linea usando il cuscino in pitone -
draw.line(xy, fill=None, width=0)
Il line()Il metodo disegna una linea dall'angolo superiore sinistro a quello inferiore destro del riquadro di delimitazione xy e della tela. La linea viene riempita utilizzando il riempimento colore. I valori predefiniti di Nessuno e 0 rispettivamente sono per i parametri riempimento e larghezza che sono opzionali.
Esempio
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.line((200, 100, 300, 200), fill=(0, 0, 0), width=10)
img.show()
Produzione

Eclisse
Di seguito è riportata la sintassi per disegnare un'ellisse usando il cuscino Python -
draw.ellipse(xy, fill=None, outline=None)
Il ellipse()Il metodo disegna l'ellisse circondata dal riquadro di delimitazione xy durante il disegno. La forma viene riempita utilizzando il riempimento colore e il perimetro nel contorno colorato. I valori predefiniti di Nessuno sono per i parametri riempimento e larghezza che sono opzionali.
Esempio
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.ellipse((200, 125, 300, 200), fill=(255, 0, 0), outline=(0, 0, 0))
img.show()
Produzione

Rettangolo
Di seguito è riportata la sintassi per disegnare un rettangolo usando il cuscino python -
draw.rectangle(xy, fill=None, outline=None)
Il rectangle()Il metodo disegna il rettangolo dato il riquadro di delimitazione xy durante il disegno. La forma viene riempita utilizzando il riempimento colore e il perimetro nel contorno colorato. I valori predefiniti di Nessuno sono per i parametri riempimento e larghezza che sono opzionali.
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.rectangle(
(200, 125, 300, 200),
fill=(255, 0, 0),
outline=(0, 0, 0))
img.show()
Produzione

Poligono
Di seguito è riportata la sintassi per disegnare un rettangolo usando il cuscino python -
draw.polygon(seq, fill=None, outline=None)
Il polygon()Il metodo disegna un poligono che collega con linee rette le posizioni della sequenza di coordinate seq durante il disegno. Anche la prima e l'ultima coordinata in seq sono collegate da una linea retta. La forma viene riempita utilizzando il riempimento colore e il perimetro nel contorno colorato. I parametri riempimento e contorno sono opzionali con i valori predefiniti Nessuno.
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.polygon(
((200, 200), (300, 100), (250, 50)),
fill=(255, 0, 0),
outline=(0, 0, 0))
img.show()
Produzione
