如何在 Python 中加载 PSD 文档
PsdImage.load 是打开 PSD/PSB 文档的唯一公共入口点——它接受文件路径或已经打开的可读流。它内部委托的低层分段读取器不是供您直接调用的。
分步指南
步骤 1:安装软件包
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATH步骤 2:导入所需类
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException步骤 3:从文件路径加载
image = PsdImage.load("input.psd")
print(f"Loaded: {image.width}x{image.height}")
image.dispose()第4步:从流加载
流不需要可定位 — load 在解析之前会将其全部内容读取到内部缓冲区中:
with open("input.psd", "rb") as stream:
image = PsdImage.load(stream)
print(f"Loaded from stream: {image.width}x{image.height}")
image.dispose()常见问题与解决方案
FileNotFoundError: File not found: .... 传递给的路径 load 未指向现有文件 — load checks os.path.isfile 在尝试打开它之前。
PsdLoadException: Unexpected end of PSD/PSB data while reading the file structure. 源流在解析过程中间耗尽数据(一个 EOFError 读取时) — 文件可能已被截断。
PsdLoadException: Failed to read PSD/PSB data from the source stream. 在从流本身读取时发生了 I/O 错误,该错误被包装后重新抛出为一个 PsdLoadException.
ArgumentNullException 在调用时 load. load 被调用时使用了 None 作为流参数。
常见问题
在调用 load 之前,我需要将流定位回起始位置吗?
不 — 如果流支持定位,load 会在读取后恢复其原始位置;如果流不支持定位,load 仍然可用,因为它会在解析之前在内部缓存流的内容。
上述两种 FileNotFoundError/PsdLoadException 失败有什么区别?
缺少文件路径会触发标准 FileNotFoundError 在任何解析开始之前。A PsdLoadException 则表示已找到并打开了文件(或流),但在解析开始后 PSD/PSB 数据本身被截断、损坏或以其他方式不可读 — 另请参见 Troubleshooting 用于版本和边界相关的 PsdLoadException 变体。