Create an image with PIL
Python is great at many things, expecially for repetitive things. We can use it to gain a lot of time, and we all are aware that today time is the most evaluable thing, because things go faster faster in today’s life.
A practical example: make an image
In this code we will create images. From scratch. I thought to make this code to use it on the web pages to enphatize something with a nice image of a text. This code will show you a nice red rectangle.
Image.new
This will create a new image with color size and color as attributes.
Image.save
This save the image create with new.
from PIL import Image, ImageDraw import os # name of the file to save filename = "img01.png" # create new image image = Image.new(mode = "RGB", size = (200,70), color = "red") # save the file image.save(filename) # open the file os.system(filename)
Write some text in it
Now we must use the ImageDraw.Draw class of PIL. The istance will be called draw (with a lot of fantasy).
ImageDraw.Draw
We will put as argument of this class the image object created with Image.new.
text
Finally we will use the method text of the ImageDraw.Draw object created to add the text to the image. This takes as arguments the position (a tuple), the text (string) and another tuple for the color.
The complete code
from PIL import Image, ImageDraw, ImageFont
import os
# name of the file to save
filename = "img01.png"
fnt = ImageFont.truetype('arial.ttf', 15)
# create new image
image = Image.new(mode = "RGB", size = (200,70), color = "red")
draw = ImageDraw.Draw(image)
draw.text((10,10), "My Text", font=fnt, fill=(255,255,0))
image.save(filename)
os.system(filename)

A function to make changes easy
from PIL import Image, ImageDraw, ImageFont
import os
def text_on_img(filename='01.png', text="Hello", size=12):
"Draw a text on an Image, saves it, show it"
fnt = ImageFont.truetype('arial.ttf', 52)
# create image
image = Image.new(mode = "RGB", size = (200,70), color = "red")
draw = ImageDraw.Draw(image)
# draw text
draw.text((10,10), text, font=fnt, fill=(255,255,0))
# save file
image.save(filename)
# show file
os.system(filename)
text_on_img(text="Text", size=52)
Let’s adapt the width of the img to the lenght of the text
from PIL import Image, ImageDraw, ImageFont
import os
def text_on_img(filename='01.png', text="Hello", size=12):
"Draw a text on an Image, saves it, show it"
fnt = ImageFont.truetype('arial.ttf', size)
# create image
image = Image.new(mode = "RGB", size = (int(size/2)*len(text),size+50), color = "red")
draw = ImageDraw.Draw(image)
# draw text
draw.text((10,10), text, font=fnt, fill=(255,255,0))
# save file
image.save(filename)
# show file
os.system(filename)
text_on_img(text="Text to write on img", size=300)
Let’s make background and color avaiable
from PIL import Image, ImageDraw, ImageFont
import os
def text_on_img(filename='01.png', text="Hello", size=12, color=(255,255,0), bg='red'):
"Draw a text on an Image, saves it, show it"
fnt = ImageFont.truetype('arial.ttf', size)
# create image
image = Image.new(mode = "RGB", size = (int(size/2)*len(text),size+50), color = bg)
draw = ImageDraw.Draw(image)
# draw text
draw.text((10,10), text, font=fnt, fill=(255,255,0))
# save file
image.save(filename)
# show file
os.system(filename)
text_on_img(text="Text to write on img", size=300, bg='red')

