Layers

Layers

PsdImage.layers zwraca każdą sparsowaną warstwę jako listę obiektów Layer. Każdy Layer udostępnia własną geometrię, widoczność i stan kompozycji oraz metadane o swoich kanałach, masce i zakresach mieszania.


Odczytywanie metadanych warstwy

name, bounds (oraz pochodne width/height/top/left/bottom/right), is_visible, opacity, clipping, blend_mode_key i channels_count są wszystkie odczytywalne bezpośrednio.

from aspose_psd_foss.psdimage import PsdImage

with PsdImage.load("input.psd") as image:
    for layer in image.layers:
        print(f"{layer.name}: {layer.bounds}, "
              f"Visible={layer.is_visible}, Opacity={layer.opacity}, "
              f"BlendMode={layer.blend_mode_key}")

Obsługiwane edycje metadanych

name, is_visible, opacity, clipping, blend_mode_key oraz cztery krawędzie granic (top/left/bottom/right) mogą być zmieniane w miejscu i zapisywane z powrotem przy użyciu PsdImage.save().

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendMode

with PsdImage.load("input.psd") as image:
    layer = image.layers[0]
    layer.name = f"{layer.name} (edited)"
    layer.is_visible = not layer.is_visible
    layer.opacity = 128
    layer.blend_mode_key = BlendMode.MULTIPLY
    image.save("output.psd")

Metadane kanału i maski

channel_information, layer_mask_data i layer_blending_ranges_data są jedynie do odczytu w tej wersji FOSS — ich settery generują NotSupportedException.

layer = image.layers[0]
for channel in layer.channel_information:
    print(f"Channel {channel.ChannelID}: {channel.compression_method}, {channel.length} bytes")

if layer.has_mask_data:
    mask = layer.layer_mask_data
    print(f"Mask bounds: {mask.mask_rectangle}, flags: {mask.flags}")

Usuwanie lub przestawianie warstw

PsdImage.layers posiada zarówno setter, jak i getter: przypisanie przefiltrowanej lub przestawionej listy zastępuje kolekcję warstw dokumentu.

from aspose_psd_foss.psdimage import PsdImage

with PsdImage.load("input.psd") as image:
    image.layers = [layer for layer in image.layers if layer.is_visible]
    image.save("output.psd")

Wskazówki i najlepsze praktyki

  • Indeksuj image.layers według pozycji; kolejność listy odpowiada kolejności warstw w dokumencie.
  • blend_mode_key akceptuje dowolną wartość wyliczeniową BlendMode — nie jest wykonywana żadna weryfikacja względem zadeklarowanego trybu kolorów dokumentu.
  • Można odczytać channel_information, layer_mask_data i layer_blending_ranges_data, ale nie można ich ponownie przypisać.
  • Wywołaj PsdImage.save() raz po zakończeniu wszystkich edycji; każde wywołanie zapisuje pełny dokument.

Typowe problemy

ProblemPrzyczynaRozwiązanie
NotSupportedException przy ustawianiu channel_information, layer_mask_data lub layer_blending_ranges_dataTe trzy właściwości są tylko do odczytu w wersji FOSS, mimo że posiadają metodę setOdczytaj wartość; nie próbuj jej ponownie przypisywać
layer_mask_data dostęp, gdy nie ma maskiNie każda warstwa ma podsekcję maskiSprawdź layer.has_mask_data przed odczytem layer.layer_mask_data

FAQ

Czy mogę usunąć warstwę?

Tak — przypisz image.layers do przefiltrowanej listy.

Czy mogę zmienić kanał lub dane maski warstwy?

Nie. channel_information, layer_mask_data i layer_blending_ranges_data są w trybie odczytu — jedynie name, is_visible, opacity, clipping, blend_mode_key oraz krawędzie granic można zmienić.


API Reference – podsumowanie

Klasa/MetodaOpis
PsdImage.layersPobiera lub ustawia kolekcję warstw — możliwe do usunięcia/przestawiania
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / rightObsługiwane edycje metadanych warstwy
Layer.bounds / width / height / channels_countGeometria warstwy tylko do odczytu
Layer.channel_information / layer_mask_data / layer_blending_ranges_dataMetadane kanału/maski/mieszania tylko do odczytu

Zobacz także

 Polski