学习空间/Python:做一个不改图片的尺寸检查器
本地开发工具 / LESSON 31

Python:做一个不改图片的尺寸检查器

从标准库只读脚本开始,不默认安装大型依赖。

基础约 8 分钟阅读,实作另计4 节现在学
CONCEPT MAP先看一眼知识之间的联系
先看一眼知识之间的联系01读取文件头02取得尺寸03检查约束04输出报告
顺着图中的联系理解本课,再用下面的练习验证。图解是教学模型,不是引擎运行结果。

01自动化先选重复且可判定的事

检查文件名、读取尺寸、统计候选数量适合自动化;判断美术是否有生活感、是否符合角色比例仍需要人类视觉判断。下面脚本只读取 PNG 文件头中的宽高,不修改图片、不安装第三方库,也不证明图片拥有真实透明或无缝拼接能力。

02完整只读脚本

check_png.py python
from __future__ import annotations
import argparse
import struct
from pathlib import Path

PNG_SIGNATURE = b"\x89PNG\r\n\x1a\n"

def read_png_size(path: Path) -> tuple[int, int]:
    with path.open("rb") as handle:
        head = handle.read(24)
    if (len(head) != 24 or head[:8] != PNG_SIGNATURE
            or head[8:12] != b"\x00\x00\x00\x0d"
            or head[12:16] != b"IHDR"):
        raise ValueError("不是可识别的 PNG IHDR 头")
    width, height = struct.unpack(">II", head[16:24])
    if width < 1 or height < 1:
        raise ValueError("宽高必须大于零")
    return width, height

def main() -> int:
    parser = argparse.ArgumentParser(description="只读检查 PNG 宽高")
    parser.add_argument("folder", type=Path)
    args = parser.parse_args()
    if not args.folder.is_dir():
        parser.error("目录不存在或不是目录")
    failures = 0
    found = 0
    for path in sorted(args.folder.iterdir()):
        if not path.is_file() or path.suffix.lower() != ".png":
            continue
        found += 1
        try:
            width, height = read_png_size(path)
            print(f"{path.name}\t{width}×{height}")
        except (OSError, ValueError, struct.error) as exc:
            failures += 1
            print(f"检查失败:{path.name}: {exc}")
    print(f"发现 {found} 张 PNG;失败 {failures} 张;未修改文件")
    return 1 if failures else 0

if __name__ == "__main__":
    raise SystemExit(main())

03如何运行与核对

运行尺寸检查 powershell
# 只把目录换成你选择的独立练习素材目录。
python .\check_png.py 'D:\学习实验\png_samples'
$LASTEXITCODE
  1. 将代码保存为 UTF-8 的 check_png.py。
  2. 准备两张已知尺寸的练习 PNG,运行后与 Krita 的图像尺寸对照。
  3. 加入一个扩展名为 .png 的无效测试文本,确认脚本报告失败且退出码为 1。
  4. 用不存在的目录测试参数错误。注意本脚本不递归遍历子目录。

04明确能力边界

读取文件头不等于完整图像解码,不能保证后续数据未损坏,也不能判断 Alpha 中是否真的存在透明像素。需要这些能力时再评估图像处理库,并在独立虚拟环境中按实际任务安装;不是看到 Python 就默认安装全部视觉工具。

动手后,再勾选

不是“我看懂了”,而是你在独立练习里做出并检查过。

CHECK YOUR UNDERSTANDING

换一个情景,你会怎么判断?

脚本读出了 1254×1254,能说明什么?

用自己的话,留一条笔记

可以写“我之前以为……,现在发现……”,或者记录还没解决的问题。

仅保存在此浏览器0 / 20000

回到资料核对

本课是解释与练习,不替代对应版本的官方手册。网页实验不运行 Godot;未标明实机验证的代码,仍需在独立工程中检查。

把这课收进你的理解里。

标记已读不会自动勾选实作,也不代表游戏功能已经完成。

输入一个你想弄明白的问题。

按 Esc 关闭 · 标题、关键词和正文一起搜索