Введение
Aspose.PSD FOSS для .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 можно только читать, но нельзя переназначать — у каждого есть сеттер, который бросает 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 во время выполнения — других сторонних зависимостей нет.