Layers
Layers
PsdImage.Layers zwraca każdą sparsowaną warstwę jako tablicę Layer. Każdy Layer udostępnia własną geometrię, widoczność i stan kompozycji oraz metadane dotyczące kanałów, maski i zakresów mieszania.
Odczytywanie metadanych warstwy
Name, Bounds (oraz pochodne Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey i ChannelsCount są wszystkie dostępne do odczytu bezpośrednio.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}Obsługiwane edycje metadanych
Name, IsVisible, Opacity, Clipping, BlendModeKey oraz cztery krawędzie ograniczeń (Top/Left/Bottom/Right) mogą być zmieniane w miejscu i zapisywane ponownie przy użyciu PsdImage.Save().
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);Metadane kanału i maski
ChannelInformation, LayerMaskData i LayerBlendingRangesData są tylko do odczytu w tej wersji FOSS — ich settery rzucają NotSupportedException.
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}");
}Usuwanie lub zmiana kolejności warstw
PsdImage.Layers ma zarówno setter, jak i getter: przypisanie przefiltrowanej lub przestawionej tablicy zastępuje kolekcję warstw dokumentu. Nie ma publicznego sposobu na stworzenie nowej instancji Layer, więc ta funkcja obsługuje wyłącznie usuwanie lub zmianę kolejności istniejących warstw — nie dodawanie nowej od podstaw.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);Wskazówki i najlepsze praktyki
- Indeksuj
image.Layerswedług pozycji; kolejność w tablicy odpowiada kolejności warstw w dokumencie. BlendModeKeyakceptuje dowolną wartość wyliczeniaBlendMode— nie jest przeprowadzana walidacja względem zadeklarowanego trybu koloru dokumentu.ChannelInformation,LayerMaskDataiLayerBlendingRangesDatamożna odczytać, ale nigdy nie przypisać ponownie.- Wywołaj
PsdImage.Save()raz po zakończeniu wszystkich zmian; każde wywołanie zapisuje pełny dokument.
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
NotSupportedException przy ustawianiu ChannelInformation, LayerMaskData lub LayerBlendingRangesData | Te trzy własności są tylko do odczytu w wersji FOSS, mimo że mają setter | Odczytaj wartość; nie próbuj jej ponownie przypisać |
LayerMaskData jest null dla warstwy | Nie każda warstwa ma podsekcję maski | Sprawdź null przed użyciem (layer.LayerMaskData is { } mask) |
FAQ
Czy mogę usunąć warstwę?
Tak — przypisz image.Layers do przefiltrowanej tablicy. Nie możesz dodać nowej warstwy, ponieważ Layer nie ma publicznego konstruktora; tylko istniejące, sparsowane warstwy mogą być zachowane, usunięte lub przestawione.
Czy mogę zmienić kanał lub dane maski warstwy?
Nie. ChannelInformation, LayerMaskData i LayerBlendingRangesData są tylko w trybie odczytu — jedynie Name, IsVisible, Opacity, Clipping, BlendModeKey oraz krawędzie granic można zmienić.
Podsumowanie API Reference
| Klasa/Metoda | Opis |
|---|---|
PsdImage.Layers | Pobiera lub ustawia kolekcję warstw — ustawialne wyłącznie w celu usunięcia/przemieszczania |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Obsługiwane edycje metadanych warstwy |
Layer.Bounds / Width / Height / ChannelsCount | Geometria warstwy tylko do odczytu |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Metadane kanału/maski/mieszania tylko do odczytu |