核心 API

核心 API

PsdImage 是加载、检查和保存 PSD/PSB 文档的入口点。它扩展了抽象的 Image 基类,该基类声明了 Width、Height、Bounds、Load()、Save() 和 Dispose()。


加载和保存文档

Image.Load() 接受文件路径或 Stream 并返回 Image;将结果强制转换为 PsdImage 以访问文档的其余表面。PsdImage.Save() 将文档写回文件路径或流。

using var image = (PsdImage)Image.Load(inputPath);
// ... inspect or edit ...
image.Save(outputPath);

文档头属性

PsdImage 将解析后的头部公开为强类型属性:Width、Height、BitsPerChannel、ColorMode、Version、Compression、Size 和 IsFlatten。

Console.WriteLine($"Width: {image.Width}, Height: {image.Height}");
Console.WriteLine($"ColorMode: {image.ColorMode}, Version: {image.Version}");
Console.WriteLine($"Compression: {image.Compression}, IsFlatten: {image.IsFlatten}");

图像资源

PsdImage.ImageResources 返回解析后的 ResourceBlock[] 数组。在此 FOSS 构建中,ImageResources、GlobalLayerResources、ActiveLayer 和 HasTransparencyData 可以读取但不能重新赋值——它们的 setter 会抛出 NotSupportedException。

foreach (ResourceBlock resource in image.ImageResources)
{
    Console.WriteLine($"Resource {resource.ID}: {resource.Name} ({resource.DataSize} bytes)");
}

技巧与最佳实践

  • 始终将 Image.Load() 的结果强制转换为 PsdImage,以访问 PSD 特定成员。
  • 将 Dispose() 级别的对象包装在 using 语句中;PsdImage 实现了 IDisposable。
  • 即使它们公开了 setter,也应将 ImageResources、GlobalLayerResources、ActiveLayer 和 HasTransparencyData 视为只读。
  • 在对 image.Layers 进行索引之前检查 image.Layers.Length —— 扁平化文档可能没有图层。

常见问题

问题原因修复
NotSupportedException 在设置 ImageResources 时尽管有 setter,此属性在 FOSS 构建中是只读的读取该值;不要尝试重新赋值
在扁平化文档上出现空的 image.Layers 数组IsFlatten 为 true,且文档没有解析的层在索引到 image.Layers 之前,请检查 image.Layers.Length(或 image.IsFlatten)

FAQ

加载 PSD 文档会解码像素数据吗?

不,PsdImage.Load() 解析文档头、图层元数据和资源,而不解码或渲染像素数据。

我可以将 PSD 文件转换为其他图像格式吗?

不。此库仅加载、检查并保存 PSD/PSB 文档——它不渲染像素数据,也不转换为其他图像格式。


API Reference 摘要

类/方法描述
Image.Load(string) / Image.Load(Stream)加载 PSD 或 PSB 文档
PsdImage.Save(string) / PsdImage.Save(Stream)保存文档
PsdImage.Width / Height / BitsPerChannel / ColorMode / Version / Compression / Size / IsFlatten文档头部属性
PsdImage.ImageResources已解析的图像资源块(只读)

另请参阅

 中文