介绍
Aspose.PSD FOSS for .NET 通过一小组类加载、检查并保存 PSD 和 PSB 文档。本文将深入探讨核心 API 中在介绍性文章中未深入覆盖的部分:Image/PsdImage 继承关系、整个库中使用的几何值类型,以及库如何报告加载和保存错误。
包含内容
图像和 PsdImage
Image 是抽象基类,并公开了 Width、Height、Bounds、Load()、Save() 和 Dispose()。PsdImage 是由 Image.Load() 为 PSD/PSB 输入返回的封闭具体实现——将结果强制转换为 PsdImage 可公开文档的其余部分:ColorMode、Version、Layers、Compression、BitsPerChannel 等。
using var image = (PsdImage)Image.Load(inputPath);
Console.WriteLine($"Bounds: {image.Bounds}"); // from the Image base class
Console.WriteLine($"ColorMode: {image.ColorMode}"); // PsdImage-specific
几何值类型
Point、Size、Rectangle 和 RectangleF 是在整个 API 中用于边界和坐标的值类型——Layer.Bounds 和 Image.Bounds 均为 Rectangle,且 PsdImage.Size 是一种 Size。Rectangle 包含真实的几何方法:Contains()、Intersect()、Union()、Inflate() 和 FromLeftTopRightBottom() 等。
Rectangle layerBounds = image.Layers[0].Bounds;
Rectangle imageBounds = image.Bounds;
bool fullyInside = imageBounds.Contains(layerBounds);
Rectangle overlap = Rectangle.Intersect(imageBounds, layerBounds);
Console.WriteLine($"Layer fits inside image: {fullyInside}, overlap: {overlap}");
资源块和异常
PsdImage.ImageResources 返回解析后的 ResourceBlock[] 数组 —— 每个块公开 ID、DataSize、Name 和 Signature。在此 FOSS 构建中,ImageResources、GlobalLayerResources、ActiveLayer 和 HasTransparencyData 可以读取但不能重新赋值 —— 每个都有一个 setter,如果被调用会抛出 NotSupportedException,因此请将它们视为只读,即使它们表现为属性。
加载和保存错误会以两种专用异常类型显现:当文档无法解析时为 PsdLoadException,当文档无法写回时为 PsdSaveException。
try
{
using var image = (PsdImage)Image.Load(inputPath);
foreach (ResourceBlock resource in image.ImageResources)
{
Console.WriteLine($"Resource {resource.ID}: {resource.Name} ({resource.DataSize} bytes)");
}
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load {inputPath}: {ex.Message}");
}
快速入门
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildusing Aspose.PSD.FileFormats.Psd;
try
{
using var image = (PsdImage)Image.Load("input.psd");
Console.WriteLine($"Bounds: {image.Bounds}, ColorMode: {image.ColorMode}");
Console.WriteLine($"ImageResources: {image.ImageResources.Length}");
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Load failed: {ex.Message}");
}
支持的格式
| 格式 | 扩展名 | 读取 | 写入 |
|---|---|---|---|
| Photoshop 文档 | psd | ✓ | ✓ |
| Photoshop 大型文档 | psb | ✓ | ✓ |
开源与许可
Aspose.PSD FOSS 对于 .NET 使用 MIT 许可证,可在商业产品中使用且无需版税,且没有评估水印或使用限制。
该软件包的版本为 1.0.0,运行时仅需要 .NET 10.0 —— 没有其他第三方依赖。