Введение

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 build
using 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}");
}

Поддерживаемые форматы

ФорматРасширениеЧтениеЗапись
Документ Photoshoppsd✓✓
Большой документ Photoshoppsb✓✓

Открытый исходный код и лицензирование

Aspose.PSD FOSS для .NET лицензирован по MIT и может использоваться в коммерческих продуктах без роялти, без водяного знака оценки и без ограничения использования.

Пакет имеет версию 1.0.0 и требует только .NET 10.0 во время выполнения — других сторонних зависимостей нет.


Начало работы

Связанные ресурсы