如何修改截断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
相关产品推荐
相关产品推荐

