zjg121 发表于 2024-4-2 12:48

相同小图拼成大图

1小图在同一个文件夹里;2小图命名规则:列-行.png。
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, x))# 先按行排序,再按列排序

# 加载一张小图片以获取其尺寸
small_image_path = os.path.join(image_dir, f"{column_row_pairs}-{column_row_pairs}.png")
small_image = Image.open(small_image_path)
small_image_width, small_image_height = small_image.size

# 初始化大图的尺寸和对象
max_column = max(pair for pair in column_row_pairs)
max_row = max(pair 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 < max_row:
      current_y += small_image_height

    # 保存大图
big_image.save(output_path)# 使用之前设置的输出路径

zjg121 发表于 2024-4-2 13:29

http://imgsrc.baidu.com/forum/pic/item/e824b899a9014c084078b79e4c7b02087bf4f44e.jpg哈哈哈,

ToDesk01 发表于 2024-4-4 00:41

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

zjg121 发表于 2024-4-4 06:28

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

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

polestar002 发表于 2024-4-7 16:17

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

pltuotuo 发表于 2024-4-8 12:29

前段时间还在找类似功能的小软件,感谢分享。
页: [1]
查看完整版本: 相同小图拼成大图