吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1141|回复: 7
收起左侧

[Python 原创] 根据dpi确定文件夹中所有图片属于A系列纸张的哪一种和纸张方向

  [复制链接]
zjg121 发表于 2024-4-4 07:19
[Python] 纯文本查看 复制代码
import os
from PIL import Image

# 假设的DPI值,用于将像素转换为毫米(1英寸 = 25.4毫米)
DPI = 300
PIXELS_TO_MM = 25.4 / DPI

# 定义标准纸张尺寸(这里以A系列为例,单位:毫米)
standard_paper_sizes = {
    'A0': (841, 1189),
    'A1': (594, 841),
    'A2': (420, 594),
    'A3': (297, 420),
    'A4': (210, 297),
    # ... 可以继续添加其他A系列纸张尺寸
}


# 检查图片尺寸并确定最接近的纸张尺寸及方向
def check_image_size_and_orientation(file_path, dpi=DPI):
    with Image.open(file_path) as img:
        width, height = img.size
        # 将像素尺寸转换为毫米
        width_mm = width * PIXELS_TO_MM
        height_mm = height * PIXELS_TO_MM
        min_dim_mm = min(width_mm, height_mm)
        aspect_ratio = width / height if width > height else height / width

        # 遍历标准纸张尺寸,找到最接近的纸张及方向
    closest_size = None
    closest_aspect_ratio_diff = float('inf')
    orientation = None

    for size_name, (std_width_mm, std_height_mm) in standard_paper_sizes.items():
        std_aspect_ratio = std_width_mm / std_height_mm

        # 计算当前纸张尺寸与图片尺寸的比例
        scale = min_dim_mm / min(std_width_mm, std_height_mm)

        # 检查比例是否在0.8到1.2之间
        if 0.8 <= scale <= 1.2:
            # 计算当前纸张宽高比与图片宽高比的差异
            aspect_ratio_diff = abs(aspect_ratio - std_aspect_ratio)

            # 如果当前差异更小,或者比例相同但之前未找到匹配的纸张,则更新最接近的纸张和宽高比差异
            if aspect_ratio_diff < closest_aspect_ratio_diff or (
                    aspect_ratio_diff == closest_aspect_ratio_diff and closest_size is None):
                closest_size = size_name
                closest_aspect_ratio_diff = aspect_ratio_diff

                # 判断方向(横向或纵向)
                orientation = '横向' if aspect_ratio > std_aspect_ratio else '纵向'

    return closest_size, orientation


# 遍历文件夹中的图片文件
def check_images_in_folder(folder_path, dpi=DPI):
    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.tiff', '.bmp', '.gif')):
            file_path = os.path.join(folder_path, filename)
            size, orientation = check_image_size_and_orientation(file_path, dpi)
            if size:
                print(f"{file_path} 属于 {size} 纸张,方向是 {orientation}。")
            else:
                print(f"{file_path} 不接近任何标准纸张尺寸。")

            # 使用示例


folder_to_check = "d:/a"  # 替换为你要检查的文件夹路径
check_images_in_folder(folder_to_check)

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
junjia215 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
guai188528 + 1 + 1 我很赞同!

查看全部评分

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

SU150228 发表于 2024-4-4 07:41
小白还是用exe吧
jy262832680 发表于 2024-4-4 08:21
fufuok 发表于 2024-4-4 09:29
ToDesk01 发表于 2024-4-4 09:42
厉害厉害,楼主噶早就发表了。实用
zyw_zjk 发表于 2024-4-4 10:51
感谢分享,支持一下。
magiclyan 发表于 2024-4-4 11:47
希望出个成品对于整理文件来说这个某些场景超级有用
mytomsummer 发表于 2024-4-14 13:43
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-11 17:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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