Python 批量导出文件夹缩略图预览表 图片墙HTML
用 Pillow 给整个文件夹里的图片批量生成小缩略图,输出一张 HTML 图片墙或 Excel 预览表,附文件名、尺寸、大小,适合素材库盘点、图片交接。
场景痛点
设计素材、产品图、扫描件堆了几千张,要盘点或交给同事,光发文件名清单根本看不出哪张是哪张。用 Python 给每张图生成一张小缩略图,拼成一个 HTML 图片墙,浏览器打开就能滚着看,再附文件名、尺寸、大小,发个链接对方就能验收。
用到的库
pip install Pillow
完整代码
# -*- coding: utf-8 -*-
# 扫整个文件夹,生成缩略图 + 一个 HTML 图片墙预览页
import os
import base64
from PIL import Image
IMG_EXTS = {".jpg", ".jpeg", ".png", ".bmp", ".webp"}
THUMB_DIR = "./_thumbs"
THUMB_SIZE = (300, 300)
def human_size(n):
for u in ["B", "KB", "MB", "GB"]:
if n < 1024:
return f"{n:.1f}{u}"
n /= 1024
return f"{n:.1f}TB"
def make_thumb(src_path, thumb_path):
with Image.open(src_path) as im:
im.thumbnail(THUMB_SIZE) # 原地缩到 300 内
im.convert("RGB").save(thumb_path, quality=70)
return im.size # 返回原始尺寸
def build_html(input_dir, out_html):
os.makedirs(THUMB_DIR, exist_ok=True)
cards = []
for name in sorted(os.listdir(input_dir)):
ext = os.path.splitext(name)[1].lower()
if ext not in IMG_EXTS:
continue
src = os.path.join(input_dir, name)
thumb = os.path.join(THUMB_DIR, name)
try:
w, h = make_thumb(src, thumb)
size = human_size(os.path.getsize(src))
cards.append(f"""
<div class="card">
<img src="{THUMB_DIR}/{name}" loading="lazy">
<div class="meta"><b>{name}</b><br>{w}x{h} · {size}</div>
</div>""")
except Exception as e:
print(f"跳过 {name}: {e}")
html = f"""<!doctype html><meta charset="utf-8">
<title>图片预览墙</title>
<style>
body{{font-family:sans-serif;background:#f5f5f5;margin:20px}}
.wall{{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}}
.card{{background:#fff;padding:8px;border-radius:6px;box-shadow:0 1px 3px #0002}}
.card img{{width:100%;height:200px;object-fit:contain;background:#fafafa}}
.meta{{font-size:12px;color:#555;margin-top:6px;word-break:break-all}}
</style>
<h1>图片预览墙({len(cards)} 张)</h1>
<div class="wall">{''.join(cards)}</div>"""
with open(out_html, "w", encoding="utf-8") as f:
f.write(html)
print(f"完成 {len(cards)} 张,预览页:{out_html}")
if __name__ == "__main__":
build_html("./photos", "./preview_wall.html")
代码讲解
im.thumbnail((300,300))原地等比缩小,保持宽高比,最大边不超过 300,文件小到几十 KB。- 缩略图统一存到
_thumbs/子目录,原图不动,HTML 里用相对路径引用,整个文件夹拷给别人也能打开。 - 卡片用 CSS Grid
auto-fill + minmax(220px, 1fr)自适应列数,窗口宽就多列、窄就少列,手机看也舒服。 loading="lazy"让浏览器滚到才加载,几千张缩略图也不卡。- 每张卡片下面写文件名、原始宽高、文件大小,光看图就能定位到原文件。
运行结果
把待盘点的图放进 ./photos,运行后当前目录生成 preview_wall.html,双击用浏览器打开就是一整面图片墙。把整个 photos/、_thumbs/、preview_wall.html 一起打包发给同事,对方解压打开即可。
注意事项
- 缩略图用 JPG 存,文件小;透明 PNG 缩略后会变白底,要保留透明就把扩展名改成
.png。 loading="lazy"在 IE 不支持,但现代浏览器都没问题。- 几千张图时 HTML 可能 2~3MB,打开稍慢,可加分页或按目录拆多个页面。
- 想要 Excel 版预览表,把缩略图路径和尺寸写进 openpyxl,用
openpyxl.drawing.image.Image把缩略图插进单元格即可。

更新时间:2026-09-14 20:25:46
上一篇:Python 批量生成水印 PDF 与图片混合文档教程