将文本与图像对齐并调整大小

Align and resize text to image

我有一张图片和一个字符串,我想将文本对齐到图片的中心并调整其大小以随图片缩放。我尝试这样做但失败了:

txt = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod"

fontsize = 1  # starting font size
para = textwrap.wrap(txt, width=15)
im = Image.open('bg.jpeg')
MAX_W, MAX_H = im.size
draw = ImageDraw.Draw(im)
font = ImageFont.truetype("arial.ttf", fontsize)
# portion of image width you want text width to be
img_fraction = MAX_H / 1000

font = ImageFont.truetype("arial.ttf", fontsize)

breakpoint = img_fraction * im.size[0]
jumpsize = 75
while True:
    if font.getsize(txt)[0] < breakpoint:
        fontsize += jumpsize
    else:
        jumpsize = jumpsize // 2
        fontsize -= jumpsize
    font = ImageFont.truetype("arial.ttf", fontsize)
    if jumpsize <= 1:
        break

# optionally de-increment to be sure it is less than criteria

current_h, pad =   MAX_W / 8, 10
for line in para:
    w, h = draw.textsize(line, font=font)
    draw.text(((MAX_W - w) / 2, current_h), line, font=font)
    current_h += h + pad

im.save('test.png')
os.remove('bg.jpeg')

试试这个函数来 trim 空格

def trim(im):
    bg = Image.new(im.mode, im.size, im.getpixel((0, 0)))
    diff = ImageChops.difference(im, bg)
    diff = ImageChops.add(diff, diff, 2.0, -100)
    bbox = diff.getbbox()
    if bbox:
        return im.crop(bbox)

调整图片大小

img=img.resize((yourwidth,yourheight),Image.ANTIALIAS))

如果您减小文本的字体大小,问题就会得到解决