0

I'm newbie on python. I found code on web but I couln't get how alignment system working. It takes names from csv and write it to jpg seperately. But long names goes out of screen and short names not center of screen. I want to fit on center. Sorry for my bad English. Thanks with my regards.

This is codes:

from PIL import Image, ImageDraw, ImageFont
import pandas as pd
import os
df = pd.read_csv('liste.csv')
font = ImageFont.truetype('font.ttf',90)
for index,j in df.iterrows():
    img = Image.open('sertifika.jpg')
    draw = ImageDraw.Draw(img)
    text_color = (17, 72, 81)
    draw.text(xy=(725,450),text='{}'.format(j['name']),fill=(0,0,0),font=font)
    img.save('sertifika/{}.jpg'.format(j['name'])) 
  • 2
    Does this answer your question? [Center-/middle-align text with PIL?](https://stackoverflow.com/questions/1970807/center-middle-align-text-with-pil) – Amin Guermazi Apr 19 '21 at 21:07

1 Answers1

1

As Amin Guermazi told you, you have your answer here:

Center-/middle-align text with PIL?

But I'd add that you'd better use opencv for this kind of image operation which is faster (in some way) and easier to understand.

Edit: As mentionned by Matiiss, here is an example to display some text in the middle of you image using opencv. Note that you can tune a lot of parameters:


import cv2

img = cv2.imread('SimpleImage.png')

text = 'Hello World!'

fontFace = cv2.FONT_HERSHEY_SIMPLEX
fontScale = 1
fontColor = (255, 255, 255)
thickness = 2

text_width, text_height = cv2.getTextSize(text, fontFace, fontScale, thickness)[0]

CenterCoordinates = (int(img.shape[1] / 2) - int(text_width / 2), int(img.shape[0] / 2) + int(text_height / 2))

cv2.putText(img, text, CenterCoordinates, fontFace, fontScale, fontColor, thickness)

cv2.imshow('image', img)

cv2.waitKey(0)
cv2.destroyAllWindows()

davidlxl
  • 3
  • 2
Barbiche
  • 51
  • 4