Wstęp
Aspose.PSD FOSS dla .NET ładuje, inspekcjonuje i zapisuje dokumenty PSD i PSB przy użyciu niewielkiego zestawu klas. Ten post przygląda się częściom rdzenia API, które nie zostały szczegółowo omówione we wstępnym poście: relacji dziedziczenia Image/PsdImage, typom wartości geometrycznych używanym w całej bibliotece oraz sposobowi, w jaki biblioteka raportuje błędy ładowania i zapisu.
Co zawiera
Obraz i PsdImage
Image jest abstrakcyjną klasą bazową i udostępnia Width, Height, Bounds, Load(), Save() oraz Dispose(). PsdImage jest zamkniętą, konkretną implementacją zwracaną przez Image.Load() dla wejścia PSD/PSB — rzutowanie wyniku na PsdImage odsłania resztę powierzchni dokumentu: ColorMode, Version, Layers, Compression, BitsPerChannel i więcej.
using var image = (PsdImage)Image.Load(inputPath);
Console.WriteLine($"Bounds: {image.Bounds}"); // from the Image base class
Console.WriteLine($"ColorMode: {image.ColorMode}"); // PsdImage-specific
Typy wartości geometrycznych
Point, Size, Rectangle i RectangleF są typami wartości używanymi do określania granic i współrzędnych w całym API — Layer.Bounds i Image.Bounds są oba Rectangle, a PsdImage.Size jest Size. Rectangle zawiera rzeczywiste metody geometryczne: Contains(), Intersect(), Union(), Inflate() i FromLeftTopRightBottom(), między innymi.
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}");
Bloki zasobów i wyjątki
PsdImage.ImageResources zwraca sparsowaną tablicę ResourceBlock[] — każdy blok udostępnia ID, DataSize, Name i Signature. W tej wersji FOSS, ImageResources, GlobalLayerResources, ActiveLayer i HasTransparencyData mogą być odczytywane, ale nie mogą być ponownie przypisane — każdy ma setter, który wyrzuca NotSupportedException, jeśli zostanie wywołany, więc traktuj je jako tylko do odczytu, mimo że wyglądają jak właściwości.
Błędy ładowania i zapisu pojawiają się jako dwa dedykowane typy wyjątków: PsdLoadException, gdy dokument nie może zostać sparsowany, oraz PsdSaveException, gdy dokument nie może zostać zapisany.
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}");
}
Szybki start
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}");
}
Obsługiwane formaty
| Format | Rozszerzenie | Odczyt | Zapis |
|---|---|---|---|
| Dokument Photoshop | psd | ✓ | ✓ |
| Duży dokument Photoshop | psb | ✓ | ✓ |
Open Source i licencjonowanie
Aspose.PSD FOSS dla .NET jest licencjonowane na zasadach MIT i może być używane w produktach komercyjnych bez opłat licencyjnych, bez znaku wodnego oceny ani limitu użytkowania.
Pakiet jest w wersji 1.0.0 i wymaga jedynie .NET 10.0 w czasie wykonywania — nie ma innych zależności zewnętrznych.