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

运行PIL(Pillow)代码后图片文件损坏,原因是什么?

问题修复方案

核心问题

你的代码存在两个关键问题:

  1. 路径中的反斜杠未正确处理,会被Python解析为转义字符,可能导致实际路径错误;
  2. 直接调用Image.open()后手动close(),对于Discogs下载的带扩展数据段的JPEG文件,Pillow的默认处理逻辑可能意外截断原文件,导致损坏。

修正后的代码

使用原始字符串处理路径+上下文管理器,确保文件安全读取且不被修改:

from PIL import Image

# 原始字符串r""避免反斜杠转义
file_path = r"C:\DLS\sampleImage.jpg"

# with上下文管理器自动管理资源,无需手动close()
with Image.open(file_path) as image:
    print(f"{image.width}x{image.height}")

极端情况的兜底方案

如果上述方法仍有问题,可以将文件完全读入内存再处理,彻底避免触碰原文件:

from PIL import Image
import io

file_path = r"C:\DLS\sampleImage.jpg"

# 以只读二进制模式读取文件到内存
with open(file_path, 'rb') as f:
    image_data = io.BytesIO(f.read())
    with Image.open(image_data) as image:
        print(f"{image.width}x{image.height}")

原因说明

  • 原始字符串r""能保证Windows路径中的反斜杠被正确识别,不会被解析为\D、\s这类转义字符;
  • 上下文管理器with会在代码块结束后自动调用close(),并确保Pillow以安全的只读逻辑处理文件,避免手动close()触发的意外文件修改;
  • Discogs下载的图片通常包含Exif缩略图或其他扩展元数据,直接调用Image.open()后手动关闭可能触发Pillow的内部逻辑错误截断文件,而内存读取的方式完全隔离了原文件,彻底杜绝损坏风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:42:42