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.layers după poziție; ordinea listei corespunde ordinii straturilor din document.
  • blend_mode_key acceptă orice valoare enum BlendMode — nu se efectuează nicio validare față de modul de culoare declarat al documentului.
  • channel_information, layer_mask_data și layer_blending_ranges_data pot 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_dataAceste 3 proprietăți sunt read-only în versiunea FOSS, în ciuda existenței unui setterCiteș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.layersObține sau setează colecția de straturi — setabil pentru eliminare/reordonare
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / rightEditări de metadate ale stratului suportate
Layer.bounds / width / height / channels_countGeometrie a stratului numai în citire
Layer.channel_information / layer_mask_data / layer_blending_ranges_dataMetadate de canal/mască/amestecare numai în citire

Vezi și:

 Română