You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改截断PNG图片以避免PIL抛出UnidentifiedImageError错误?

批量修复无法识别的小PNG图片方案

核心解决思路

既然开启ImageFile.LOAD_TRUNCATED_IMAGES = True能正常读取这些异常PNG,那我们就用这个规则先读取图片,再重新保存为标准PNG格式,这样第三方函数就能直接识别了。

Python批量处理脚本

直接用Pillow写个脚本批量处理数据集里的图片,效率高还能精准控制:

from PIL import Image, ImageFile
import os

# 开启加载截断图片的权限
ImageFile.LOAD_TRUNCATED_IMAGES = True

# 替换成你的数据集路径和输出路径
dataset_path = "你的数据集文件夹路径"
save_path = "处理后图片的保存路径"
os.makedirs(save_path, exist_ok=True)

for file_name in os.listdir(dataset_path):
    if file_name.lower().endswith(".png"):
        full_path = os.path.join(dataset_path, file_name)
        # 可选:只处理50KB及以下的文件,提升速度
        if os.path.getsize(full_path) > 50 * 1024:
            continue
        try:
            img = Image.open(full_path)
            # 重新保存为标准PNG
            img.save(os.path.join(save_path, file_name), format="PNG")
            print(f"搞定:{file_name}")
        except Exception as e:
            print(f"{file_name}处理失败:{str(e)}")

命令行快速处理(无需写代码)

如果不想写Python脚本,用ImageMagick的convert命令也能批量搞:

# 先建输出文件夹
mkdir -p fixed_pngs
# 遍历当前目录下所有PNG,只处理50KB以内的
for img in *.png; do
    if [ $(stat -c%s "$img") -le 51200 ]; then
        convert "$img" "fixed_pngs/$img"
    fi
done

验证处理效果

处理完拿原测试代码验证:

from PIL import Image

img = Image.open("处理后的图片路径")
img  # 正常显示就说明没问题

内容的提问来源于stack exchange,提问作者Meggy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:14:53