相同小图拼成大图

查看 68|回复 5
作者:zjg121   
1小图在同一个文件夹里;2小图命名规则:列-行.png。
[Python] 纯文本查看 复制代码from PIL import Image
import os
import re
# 设置小图片所在的目录
image_dir = 'D:/52pj/dizhiyun/'  # 替换为你的图片目录路径
output_path = 'D:/52pj/dizhiyun/big_image.png'  # 设置输出大图的路径
# 获取目录下所有文件名,并按照“列-行”的规则解析它们
image_files = os.listdir(image_dir)
column_row_pairs = [
    (int(re.search(r'(\d+)-(\d+)', file_name).group(1)), int(re.search(r'(\d+)-(\d+)', file_name).group(2)))
    for file_name in image_files if re.search(r'(\d+)-(\d+)', file_name)
]
# 对列和行进行排序,确保拼接顺序正确
column_row_pairs.sort(key=lambda x: (x[1], x[0]))  # 先按行排序,再按列排序
# 加载一张小图片以获取其尺寸
small_image_path = os.path.join(image_dir, f"{column_row_pairs[0][0]}-{column_row_pairs[0][1]}.png")
small_image = Image.open(small_image_path)
small_image_width, small_image_height = small_image.size
# 初始化大图的尺寸和对象
max_column = max(pair[0] for pair in column_row_pairs)
max_row = max(pair[1] for pair in column_row_pairs)
big_image_width = max_column * small_image_width  # 假设所有小图片宽度相同
big_image_height = max_row * small_image_height  # 假设所有小图片高度相同
big_image = Image.new('RGB', (big_image_width, big_image_height))
# ... 省略之前的代码 ...
# 加载并拼接小图片到大图中
current_y = 0  # 初始化大图上的当前位置(仅需要y坐标,因为x坐标会在循环中重置)
for row in range(0, max_row + 1):  # 按行遍历,从1开始到最大行数
    current_x = 0  # 重置x坐标,开始新的一行
    for column in range(0, max_column + 1):  # 按列遍历,从1开始到最大列数
        # 构造小图片的文件名
        small_image_path = os.path.join(image_dir, f"{column}-{row}.png")
        # 检查文件是否存在,以避免因文件名格式错误或文件缺失导致的错误
        if os.path.exists(small_image_path):
            small_image = Image.open(small_image_path)
            big_image.paste(small_image, (current_x, current_y))
            current_x += small_image_width  # 移动到下一列的位置
        else:
            # 如果文件不存在,则跳过,可能需要在这里添加错误处理代码
            print(f"Warning: File not found: {small_image_path}")
            # 如果不是最后一行,则换行并增加y坐标
    if row

大图, 图片

zjg121
OP
  

[i]哈哈哈,
ToDesk01   

请教下楼主:有大量的加工图像,分别有A0 A1 A2 A3 A4 等规格,且这些图像都是在一起存储,DPI固定,按照相关的宽高;现在我分别统计图像A0 A1 A2 A3 A4数量。求教如何解,有得到一些方案,但图像有横向,竖向或其他缘故导致统计结果不准确。
zjg121
OP
  


ToDesk01 发表于 2024-4-4 00:41
请教下楼主:有大量的加工图像,分别有A0 A1 A2 A3 A4 等规格,且这些图像都是在一起存储,DPI固定,按照相 ...

计算出宽和高的最小值,除以各种标准纸张的最小值,商在0.8~1.2之间,就可以确定了。如果不在这个范围内,这图的大小就离谱了。
polestar002   

下载某文件时,正好需要这个功能
pltuotuo   

前段时间还在找类似功能的小软件,感谢分享。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部