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.Layers według pozycji; kolejność w tablicy odpowiada kolejności warstw w dokumencie.
  • BlendModeKey akceptuje dowolną wartość wyliczenia BlendMode — nie jest przeprowadzana walidacja względem zadeklarowanego trybu koloru dokumentu.
  • ChannelInformation, LayerMaskData i LayerBlendingRangesData moż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

ProblemPrzyczynaRozwiązanie
NotSupportedException przy ustawianiu ChannelInformation, LayerMaskData lub LayerBlendingRangesDataTe trzy własności są tylko do odczytu w wersji FOSS, mimo że mają setterOdczytaj wartość; nie próbuj jej ponownie przypisać
LayerMaskData jest null dla warstwyNie każda warstwa ma podsekcję maskiSprawdź 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/MetodaOpis
PsdImage.LayersPobiera lub ustawia kolekcję warstw — ustawialne wyłącznie w celu usunięcia/przemieszczania
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightObsługiwane edycje metadanych warstwy
Layer.Bounds / Width / Height / ChannelsCountGeometria warstwy tylko do odczytu
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataMetadane kanału/maski/mieszania tylko do odczytu

Zobacz także

 Polski