Skip to content Skip to sidebar Skip to footer

How To Draw Text With Image In Background?

I want to make something like this python. I have the image in background and write text with transparent fill, so that image shows up.

Solution 1:

Here's one way I found to do it using the Image.composite() function which is documented here and here.

The approach used is described (very) tersely in this answer to the question Is it possible to mask an image in Python Imaging Library (PIL)? by @Mark Ransom…the following is just an illustration of applying it to accomplish what you want do.

from PIL import Image, ImageDraw, ImageFont

BACKGROUND_IMAGE_FILENAME = 'cookie_cutter_background_cropped.png'
RESULT_IMAGE_FILENAME = 'cookie_cutter_text_result.png'
THE_TEXT = 'LOADED'
FONT_NAME = 'arialbd.ttf'# Arial Bold# Read the background image and convert to an RGB image with Alpha.withopen(BACKGROUND_IMAGE_FILENAME, 'rb') as file:
    bgr_img = Image.open(file)
    bgr_img = bgr_img.convert('RGBA')  # Give iamge an alpha channel.
    bgr_img_width, bgr_img_height = bgr_img.size
    cx, cy = bgr_img_width//2, bgr_img_height//2# Center of image.# Create a transparent foreground to be result of non-text areas.
fgr_img = Image.new('RGBA', bgr_img.size, color=(0, 0, 0, 0))

font_size = bgr_img_width//len(THE_TEXT)
font = ImageFont.truetype(FONT_NAME, font_size)

txt_width, txt_height = font.getsize(THE_TEXT)  # Size of text w/font if rendered.
tx, ty = cx - txt_width//2, cy - txt_height//2# Center of text.

mask_img = Image.new('L', bgr_img.size, color=255)
mask_img_draw = ImageDraw.Draw(mask_img)
mask_img_draw.text((tx, ty), THE_TEXT, fill=0, font=font, align='center')

res_img = Image.composite(fgr_img, bgr_img, mask_img)
res_img.save(RESULT_IMAGE_FILENAME)
res_img.show()

Which, using the following BACKGROUND_IMAGE:

background image

produced the image shown below, which is it being viewed in Photoshop so the transparent background it has would be discernible (not to scale):

result image produced

Here's an enlargement, showing the smoothly rendered edges of the characters:

magnified section of resulting image

Post a Comment for "How To Draw Text With Image In Background?"