Einleitung

PsdImage.Layers gibt jede Ebene in einem PSD- oder PSB-Dokument als ein Layer-Array zurück. Dieser Beitrag betrachtet speziell das, was ein Layer offenlegt: seine Geometrie und den visuellen Zustand, die Aufzählungen für Mischmodus und Masken-Flaggen sowie die Metadatenklassen, die die Kanäle, die Maske und die Mischbereiche einer Ebene beschreiben.


Was enthalten ist

Die Layer-Klasse

Jedes Layer enthält einen Pascal-Namen (Name), ein begrenzendes Rectangle (Bounds, mit abgeleiteten Width/Height/Top/Left/Bottom/Right), Sichtbarkeits- und Kompositionszustand (IsVisible, Opacity, Clipping, BlendModeKey) sowie eine Kanalanzahl (ChannelsCount). Name, IsVisible, Opacity, Clipping, BlendModeKey und die vier Begrenzungskanten können alle geändert und mit PsdImage.Save() zurückgeschrieben werden.

using var image = (PsdImage)Image.Load(inputPath);

foreach (Layer layer in image.Layers)
{
    Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
                       $"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
                       $"BlendMode={layer.BlendModeKey}");
}

Mischmodi und Masken-Flags

BlendModeKey ist ein BlendMode-Enum-Wert — die Bibliothek definiert alle 29 Standard-PSD-Mischmodi (Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity und weitere). Ein separates LayerMaskFlags-Enum (None, RelativeToLayer, Disabled, InvertedWhenBlending, UserMaskFromRenderingOtherData, UserOrVectorMasksHaveParameters) beschreibt das Masken-Render-Verhalten, wenn eine Ebene eine besitzt.

Kanal- und Masken-Metadaten

Layer.ChannelInformation gibt ein ChannelInformation[] zurück, das die ID, das Komprimierungsmethode und die Byte-Länge jedes Kanals beschreibt. Layer.LayerMaskData (ein abstraktes LayerMaskData, konkret ein LayerMaskDataShort, wenn vorhanden) beschreibt die Grenzen und Flags einer Ebenenmaske; Layer.LayerBlendingRangesData stellt die zusammengesetzten und pro-Kanal-Blend-Bereiche bereit. Alle drei dieser Eigenschaften sind in diesem FOSS-Build schreibgeschützt — ihre Setter werfen NotSupportedException, wenn sie aufgerufen werden, obwohl sie als reguläre Get/Set-Eigenschaften erscheinen.

Layer layer = image.Layers[0];
foreach (ChannelInformation channel in layer.ChannelInformation)
{
    Console.WriteLine($"Channel {channel.ChannelID}: {channel.CompressionMethod}, {channel.Length} bytes");
}

if (layer.LayerMaskData is { } mask)
{
    Console.WriteLine($"Mask bounds: {mask.MaskRectangle}, flags: {mask.Flags}");
}

Schnellstart

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;
using Aspose.PSD.FileFormats.Psd.Layers;
using System.Linq;

using var image = (PsdImage)Image.Load("input.psd");

var visibleLayers = image.Layers.Where(layer => layer.IsVisible);
foreach (Layer layer in visibleLayers)
{
    Console.WriteLine($"{layer.Name}: Opacity={layer.Opacity}, BlendMode={layer.BlendModeKey}");
}

Unterstützte Formate

FormatErweiterungLesenSchreiben
Photoshop-Dokumentpsd✓✓
Photoshop Large-Dokumentpsb✓✓

Open Source & Lizenzierung

Aspose.PSD FOSS für .NET ist unter der MIT-Lizenz veröffentlicht und darf in kommerziellen Produkten ohne Lizenzgebühren verwendet werden, ohne Evaluationswasserzeichen oder Nutzungslimit.

Das Paket ist in Version 1.0.0 und benötigt zur Laufzeit nur .NET 10.0 — es hat keine weiteren Drittanbieter-Abhängigkeiten.


Erste Schritte

Verwandte Ressourcen