图片拼接,并显示文字

有一些图片,每张图片有对应的文本,需要一张一张拼接为 N 行 M 列的形式,每张图片的文本显示在它下方,文字没有换行,换行的一直有问题,不过一般文本也不会太长

from PIL import Image, ImageDraw, ImageFont


# 获取图片和对应文本的列表
images_and_texts = [
    ('img/1.png', '阿萨法大使'),
    ('img/2.png', 'I两个花见花开就还好归纳刚发'),
    ('img/3.png', '发给还能给你发的那个让他很尬虽然'),
    ('img/4.png', '阿啊省公司辅导班v没搞错没法干画法高浩然回来后'),
    ('img/5.png', '发生的你付款就是你的科技归纳科技南国际卡'),
    ('img/6.png', 'v出门询价单你发几个黄大发'),
    ('img/7.png', '想你MV帮忙下班v计划'),
    ('img/8.png', '破会有你,你,没看到两三年饭卡好地方'),
    ('img/9.png', '阿妈审批单看懂iUR哦是吗佛困哪扫地机个'),
    ('img/10.png', '说法你啊滚你爸吃米线,i1'),
    ('img/11.png', '阿萨法聚会那你可能尽快回iu'),
    ('img/12.png', '实惠哦接哦i价格哦in了看那看归纳,,'),
]

# 设置字体和字体大小
font_path = "simhei.ttf"  # 请替换为你系统中存在的字体文件路径
font_size = 50

# 获取最大图片尺寸
max_width = 0
max_height = 0
for img_file, _ in images_and_texts:
    with Image.open(img_file) as img:
        max_width = max(max_width, img.width)
        max_height = max(max_height, img.height)

# 调整网格布局以适应12张图片
grid_rows = 3
grid_cols = 4

# 创建新图像
new_img = Image.new('RGB', (max_width * grid_cols, max_height * grid_rows), (255, 255, 255))

# 定义字体对象
font = ImageFont.truetype(font_path, font_size)

# 在新图像上放置图片和文本
index = 0
for row in range(grid_rows):
    for col in range(grid_cols):
        if index < len(images_and_texts):
            img_file, text = images_and_texts[index]
            with Image.open(img_file) as img:
                img_resized = img.resize((max_width, max_height), Image.ANTIALIAS)
                new_img.paste(img_resized, (max_width * col, max_height * row))

                draw = ImageDraw.Draw(new_img)
                text_width, text_height = draw.textsize(text, font=font)
                text_pos = ((max_width - text_width) // 2 + max_width * col, max_height * (row + 1) - text_height)
                draw.text(text_pos, text, fill=(255, 0, 0), font=font)

            index += 1

# 保存最终图像
new_img.save("merged_image.jpg")

如果只想拼接图片,把这几行注释掉就可以

# draw = ImageDraw.Draw(new_img)
# text_width, text_height = draw.textsize(text, font=font)
# text_pos = ((max_width - text_width) // 2 + max_width * col, max_height * (row + 1) - text_height)
# draw.text(text_pos, text, fill=(255, 0, 0), font=font)

相关推荐

  1. 拼接图片路径不显示:vue

    2024-03-24 12:06:04       10 阅读
  2. js 实现图片纵向拼接下载

    2024-03-24 12:06:04       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 12:06:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 12:06:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 12:06:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 12:06:04       18 阅读

热门阅读

  1. Web 中的 3D 游戏

    2024-03-24 12:06:04       17 阅读
  2. 云扩展要求(云租户)

    2024-03-24 12:06:04       17 阅读
  3. Redis 教程系列之Redis 配置(三)

    2024-03-24 12:06:04       20 阅读
  4. ubuntu安装可调试的ffmpeg

    2024-03-24 12:06:04       14 阅读
  5. vue3项目的创建

    2024-03-24 12:06:04       20 阅读
  6. Dr4g0n

    Dr4g0n

    2024-03-24 12:06:04      19 阅读
  7. Codeup_5973:问题 B: 【递归入门】组合的输出

    2024-03-24 12:06:04       18 阅读
  8. Spark 安装(集群模式)

    2024-03-24 12:06:04       23 阅读
  9. 独立服务器和云计算各有什么优势?

    2024-03-24 12:06:04       14 阅读