扣丁学堂Python培训简述Python如何在图片中插入大量文字且自动换行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/codingker/article/details/88849737

本篇文章扣丁学堂Python培训小编和喜欢Python开发技术的小伙伴们分享一下Python开发技术:Python如何在图片中插入大量文字且自动换行,小编觉得有很好的参考价值,现在分享给小伙伴们,希望对小伙伴有所帮助。

Python培训

题:

如何在图片中插入大量文字并且自动换行

果:

始图:

Python学习

果图:

Python视频

明:

若需要写入中文请使用中文字体

现方式:

from PIL import Image, ImageDraw, ImageFont

class ImgText:

  font = ImageFont.truetype("micross.ttf", 24)

  def __init__(self, text):

    # 预设宽度 可以修改成你需要的图片宽度

    self.width = 100

    # 文本

    self.text = text

    # 段落 , 行数, 行高

    self.duanluo, self.note_height, self.line_height = self.split_text()

  def get_duanluo(self, text):

    txt = Image.new('RGBA', (100, 100), (255, 255, 255, 0))

    draw = ImageDraw.Draw(txt)

    # 所有文字的段落

    duanluo = ""

    # 宽度总和

    sum_width = 0

    # 几行

    line_count = 1

    # 行高

    line_height = 0

    for char in text:

      width, height = draw.textsize(char, ImgText.font)

      sum_width += width

      if sum_width > self.width: # 超过预设宽度就修改段落 以及当前行数

        line_count += 1

        sum_width = 0

        duanluo += '\n'

      duanluo += char

      line_height = max(height, line_height)

    if not duanluo.endswith('\n'):

      duanluo += '\n'

    return duanluo, line_height, line_count

  def split_text(self):

    # 按规定宽度分组

    max_line_height, total_lines = 0, 0

    allText = []

    for text in self.text.split('\n'):

      duanluo, line_height, line_count = self.get_duanluo(text)

      max_line_height = max(line_height, max_line_height)

      total_lines += line_count

      allText.append((duanluo, line_count))

    line_height = max_line_height

    total_height = total_lines * line_height

    return allText, total_height, line_height

  def draw_text(self):

    """

    绘图以及文字

    :return:

    """

    note_img = Image.open("001.png").convert("RGBA")

    draw = ImageDraw.Draw(note_img)

    # 左上角开始

    x, y = 0, 0

    for duanluo, line_count in self.duanluo:

      draw.text((x, y), duanluo, fill=(255, 0, 0), font=ImgText.font)

      y += self.line_height * line_count

    note_img.save("result.png")

if __name__ == '__main__':

  n = ImgText(

    "1234567890" * 5)

  n.draw_text()

以上就是扣丁学堂Python在线学习小编给大家分享的Python如何在图片中插入大量文字且自动换行,希望对小伙伴们有所帮助,想要了解更多内容的小伙伴可以登录扣丁学堂官网咨询。

想要学好Python开发小编给大家推荐口碑良好的扣丁学堂,扣丁学堂有专业老师制定的Python学习路线图辅助学员学习,此外还有与时俱进的Python视频教程供大家学习,想要学好Python开发技术的小伙伴快快行动吧。

猜你喜欢

转载自blog.csdn.net/codingker/article/details/88849737
今日推荐