3

I am trying to create an image with some text in python like:

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("test.png")

This works fine, although, I was unable to add more colors, for instance 3 different colors RED,YELLOW, GREEN that will be like a semaphore.

Also, can the image be transformed, for instance round the corners?

Many thanks

2
  • Probable duplicate of this question Commented Oct 11, 2014 at 0:40
  • @Jonathan Eunice, This is definitely useful, but the change I needed in the above example should not require more than 3 or 4 lines. Something like add/draw another rectangle on the Image, just with another color. for the corners, one ellipse would probably do the job :) Commented Oct 11, 2014 at 0:57

1 Answer 1

4

You can use the chord call at the ImageDraw.Draw class. You must pass this function four parameters, first one is position and size, described as an enclosing box, i.e. (x1, y1, x2, y2), second one is the start angle and the third one is the end angle; if you want a full circle you must specify 0 and 360, respectively. You can set the fill colour with a named parameter fill.

Better explained with an example:

import PIL
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw

font = ImageFont.truetype("/usr/share/fonts/truetype/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.chord((100, 75, 125, 100), 0, 360, fill='green')
draw.chord((75, 100, 100, 125), 0, 360, fill='blue')
draw.chord((125, 125, 150, 150), 0, 360, fill='yellow')
draw = ImageDraw.Draw(img)

img.save("test.png")
Sign up to request clarification or add additional context in comments.

3 Comments

I used colours green, blue and yellow instead of red, yellow, green because of the red background. It's easy to change this.
If you want to draw a semaphore, maybe you can use a predefined imaged as a base, instead of creating a new image. You can do this using the method load from PIL.Image.
Also, the last call before the save operation is unnecesary: draw = ImageDraw.Draw(img)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.