Python PIL 打开图片获取尺寸 宽高大小教程
用 Pillow 打开本地图片,读取宽、高、分辨率、文件大小与颜色模式,支持 JPG/PNG/WebP 批量输出 CSV 清单,告别逐张右键属性查看。
场景痛点
设计稿、商品图、截图堆在一个文件夹里,要统计每张图的宽高和文件大小,只能逐张右键看属性,上百张图点到手酸。还要挑出分辨率不达标的图,肉眼根本看不出差别。用 Pillow 几行代码就能把整个文件夹的图片尺寸、颜色模式、文件大小全部读出来,直接导出成 CSV 表格。
用到的库
pip install Pillow
完整代码
# -*- coding: utf-8 -*-
# 批量读取文件夹下所有图片的尺寸、格式、颜色模式、文件大小
import os
import csv
from PIL import Image
# 支持的图片扩展名
IMG_EXTS = {".jpg", ".jpeg", ".png", ".bmp", ".gif", ".webp", ".tiff"}
def human_size(num_bytes):
"""把字节数转成易读的 KB/MB 字符串"""
for unit in ["B", "KB", "MB", "GB"]:
if num_bytes < 1024:
return f"{num_bytes:.2f}{unit}"
num_bytes /= 1024
return f"{num_bytes:.2f}TB"
def scan_images(input_dir, out_csv):
rows = []
for name in sorted(os.listdir(input_dir)):
ext = os.path.splitext(name)[1].lower()
if ext not in IMG_EXTS:
continue
path = os.path.join(input_dir, name)
try:
with Image.open(path) as im:
width, height = im.size # 宽、高(像素)
fmt = im.format # 原始格式 JPEG/PNG...
mode = im.mode # 颜色模式 RGB/RGBA/L
dpi = im.info.get("dpi", ("-", "-")) # 分辨率 DPI
size = os.path.getsize(path)
rows.append([name, fmt, mode, width, height,
f"{width}x{height}", human_size(size),
f"{dpi[0]}x{dpi[1]}"])
print(f"OK {name} {width}x{height} {human_size(size)}")
except Exception as e:
print(f"跳过 {name}: {e}")
# 写出 CSV,utf-8-sig 让 Excel 直接打开不乱码
with open(out_csv, "w", newline="", encoding="utf-8-sig") as f:
w = csv.writer(f)
w.writerow(["文件名", "格式", "颜色模式", "宽px", "高px",
"尺寸", "文件大小", "DPI"])
w.writerows(rows)
print(f"完成,共 {len(rows)} 张,结果写入 {out_csv}")
if __name__ == "__main__":
scan_images("./photos", "./image_size_report.csv")
代码讲解
Image.open(path)是 Pillow 的入口,打开后用上下文管理器with自动关闭,避免文件句柄泄漏。im.size返回(width, height)元组,单位是像素,这是最常用的尺寸来源。im.format记录原始编码格式,im.mode是颜色模式:RGB不透明彩色、RGBA带透明通道、L灰度。im.info.get("dpi")读取嵌入的打印分辨率,很多图没有写 DPI,所以用.get兜底。os.path.getsize直接拿磁盘字节数,human_size转成 KB/MB,方便阅读。- CSV 用
utf-8-sig编码,Excel 双击打开中文不会乱码。
运行结果
把待检查的图片放进 ./photos,运行后终端逐张打印尺寸,同时在当前目录生成 image_size_report.csv,用 Excel 打开就是一张完整的图片台账表,可直接按宽高排序筛掉尺寸不合格的图。
注意事项
- Pillow 读 GIF 只取第一帧的尺寸,不会遍历多帧;要动图帧信息需另装
pillow的完整版本并逐帧 seek。 - WebP 支持需要 Pillow 8.0 以上版本,老版本请
pip install -U Pillow。 - 损坏图片会抛异常,代码里
try/except已经兜底,不会中断整批。 im.size读的是逻辑像素,和 EXIF 旋转后的显示方向有关;若发现手机照片方向不对,需要配合ImageOps.exif_transpose先转正。

更新时间:2026-09-14 20:21:25
上一篇:Python 图片圆角处理 批量生成圆角PNG透明教程