Layers
Layers
PsdImage.layers returnează fiecare strat analizat ca o listă de obiecte Layer. Fiecare Layer expune propria geometrie, vizibilitate și starea de compozitare, precum și metadatele despre canalele sale, mască și intervalele de amestecare.
Citirea Metadatelor Straturilor
name, bounds (și cele derivate width/height/top/left/bottom/right), is_visible, opacity, clipping, blend_mode_key și channels_count pot fi citite direct.
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}")Editări de Metadate Suportate
name, is_visible, opacity, clipping, blend_mode_key și cele patru margini de delimitare (top/left/bottom/right) pot fi modificate la fața locului și scrise înapoi cu 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")Metadatele Canalului și Măștii
channel_information, layer_mask_data și layer_blending_ranges_data sunt numai citire în această versiune FOSS — set-erele lor aruncă 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}")Eliminarea sau Reordonarea Straturilor
PsdImage.layers are un setter, precum și un getter: atribuirea unei liste filtrate sau reordonate înlocuiește colecția de straturi a documentului.
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")Sfaturi și Cele Mai Bune Practici
- Indexați în
image.layersdupă poziție; ordinea listei corespunde ordinii straturilor din document. blend_mode_keyacceptă orice valoare enumBlendMode— nu se efectuează nicio validare față de modul de culoare declarat al documentului.channel_information,layer_mask_datașilayer_blending_ranges_datapot fi citite, dar nu pot fi reasignate.- Apelați
PsdImage.save()o singură dată după toate modificările; fiecare apel scrie întregul document.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
NotSupportedException la setarea channel_information, layer_mask_data sau layer_blending_ranges_data | Aceste 3 proprietăți sunt read-only în versiunea FOSS, în ciuda existenței unui setter | Citește valoarea; nu încerca să o reasignezi |
layer_mask_data acces când nu există mască | Nu fiecare strat are o subsecțiune de mască | Verificați layer.has_mask_data înainte de a citi layer.layer_mask_data |
FAQ
Pot să elimin un strat?
Da — reasignează image.layers la o listă filtrată.
Pot să modific canalul sau datele măștii unui strat?
Nu. channel_information, layer_mask_data și layer_blending_ranges_data sunt numai în citire — doar name, is_visible, opacity, clipping, blend_mode_key și marginile limită pot fi modificate.
API Reference Rezumat
| Clasă/Metodă | Descriere: |
|---|---|
PsdImage.layers | Obține sau setează colecția de straturi — setabil pentru eliminare/reordonare |
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / right | Editări de metadate ale stratului suportate |
Layer.bounds / width / height / channels_count | Geometrie a stratului numai în citire |
Layer.channel_information / layer_mask_data / layer_blending_ranges_data | Metadate de canal/mască/amestecare numai în citire |