将文本与图像对齐并调整大小
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))
如果您减小文本的字体大小,问题就会得到解决
我有一张图片和一个字符串,我想将文本对齐到图片的中心并调整其大小以随图片缩放。我尝试这样做但失败了:
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))
如果您减小文本的字体大小,问题就会得到解决