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.layerswedług pozycji; kolejność listy odpowiada kolejności warstw w dokumencie. blend_mode_keyakceptuje dowolną wartość wyliczeniowąBlendMode— nie jest wykonywana żadna weryfikacja względem zadeklarowanego trybu kolorów dokumentu.- Można odczytać
channel_information,layer_mask_datailayer_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
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
NotSupportedException przy ustawianiu channel_information, layer_mask_data lub layer_blending_ranges_data | Te trzy właściwości są tylko do odczytu w wersji FOSS, mimo że posiadają metodę set | Odczytaj wartość; nie próbuj jej ponownie przypisywać |
layer_mask_data dostęp, gdy nie ma maski | Nie każda warstwa ma podsekcję maski | Sprawdź 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/Metoda | Opis |
|---|---|
PsdImage.layers | Pobiera lub ustawia kolekcję warstw — możliwe do usunięcia/przestawiania |
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / right | Obsługiwane edycje metadanych warstwy |
Layer.bounds / width / height / channels_count | Geometria warstwy tylko do odczytu |
Layer.channel_information / layer_mask_data / layer_blending_ranges_data | Metadane kanału/maski/mieszania tylko do odczytu |