吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1258|回复: 5
收起左侧

[Python 原创] 相同小图拼成大图

[复制链接]
zjg121 发表于 2024-4-2 12:48
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 < max_row:
        current_y += small_image_height

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

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ToDesk01 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| zjg121 发表于 2024-4-2 13:29
哈哈哈,
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
前段时间还在找类似功能的小软件,感谢分享。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表