相同小图拼成大图
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)# 使用之前设置的输出路径 http://imgsrc.baidu.com/forum/pic/item/e824b899a9014c084078b79e4c7b02087bf4f44e.jpg哈哈哈, 请教下楼主:有大量的加工图像,分别有A0 A1 A2 A3 A4 等规格,且这些图像都是在一起存储,DPI固定,按照相关的宽高;现在我分别统计图像A0 A1 A2 A3 A4数量。求教如何解,有得到一些方案,但图像有横向,竖向或其他缘故导致统计结果不准确。 ToDesk01 发表于 2024-4-4 00:41
请教下楼主:有大量的加工图像,分别有A0 A1 A2 A3 A4 等规格,且这些图像都是在一起存储,DPI固定,按照相 ...
计算出宽和高的最小值,除以各种标准纸张的最小值,商在0.8~1.2之间,就可以确定了。如果不在这个范围内,这图的大小就离谱了。 下载某文件时,正好需要这个功能 前段时间还在找类似功能的小软件,感谢分享。
页:
[1]