Layers

Layers

PsdImage.Layers επιστρέφει κάθε αναλυμένο στρώμα ως πίνακα Layer. Κάθε Layer αποκαλύπτει τη δική του γεωμετρία, ορατότητα και κατάσταση συνθεσης, καθώς και μεταδεδομένα σχετικά με τα κανάλια του, τη μάσκα και τις περιοχές ανάμειξης.


Ανάγνωση Μεταδεδομένων Στρώματος

Name, Bounds (και τα παράγωγα Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey, και ChannelsCount είναι όλα αναγνώσιμα άμεσα.

foreach (Layer layer in image.Layers)
{
    Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
                       $"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
                       $"BlendMode={layer.BlendModeKey}");
}

Υποστηριζόμενες Επεξεργασίες Μεταδεδομένων

Name, IsVisible, Opacity, Clipping, BlendModeKey, και οι τέσσερις άκρες ορίων (Top/Left/Bottom/Right) μπορούν να τροποποιηθούν επί τόπου και να ξαναγραφούν με 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);

Μεταδεδομένα Καναλιού και Μάσκας

ChannelInformation, LayerMaskData και LayerBlendingRangesData είναι μόνο για ανάγνωση σε αυτή τη δωρεάν έκδοση FOSS — οι setters τους προκαλούν 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}");
}

Αφαίρεση ή Αναδιάταξη Στρωμάτων

PsdImage.Layers έχει τόσο setter όσο και getter: η ανάθεση ενός φιλτραρισμένου ή αναδιατεταγμένου πίνακα αντικαθιστά τη συλλογή στρωμάτων του εγγράφου. Δεν υπάρχει δημόσιος τρόπος να δημιουργηθεί μια ολοκαίνουργια παρουσία Layer, επομένως αυτό υποστηρίζει μόνο την αφαίρεση ή την αναδιάταξη των ήδη υπαρχόντων στρωμάτων — όχι την προσθήκη ενός από την αρχή.

// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);

Συμβουλές και Καλές Πρακτικές

  • Προσπελάστε το image.Layers με βάση τη θέση· η σειρά του πίνακα ταιριάζει με τη σειρά στρώματος του εγγράφου.
  • BlendModeKey δέχεται οποιαδήποτε τιμή enum του BlendMode — δεν γίνεται καμία επαλήθευση σε σχέση με τη δηλωμένη λειτουργία χρώματος του εγγράφου.
  • ChannelInformation, LayerMaskData και LayerBlendingRangesData μπορούν να διαβαστούν αλλά ποτέ να επανατοποθετηθούν.
  • Καλέστε το PsdImage.Save() μία φορά μετά από όλες τις επεξεργασίες· κάθε κλήση γράφει το πλήρες έγγραφο.

Κοινά Προβλήματα

ΠρόβλημαΑιτίαΔιόρθωση
NotSupportedException κατά τη ρύθμιση του ChannelInformation, LayerMaskData ή LayerBlendingRangesDataΑυτές οι 3 ιδιότητες είναι μόνο για ανάγνωση στην έκδοση FOSS, παρά το ότι έχουν setterΔιαβάστε την τιμή· μην προσπαθήσετε να την επαναεκχωρήσετε
LayerMaskData είναι null για ένα στρώμαΔεν κάθε στρώμα έχει υποενότητα μάσκαςΕλέγξτε για null πριν από τη χρήση (layer.LayerMaskData is { } mask)

FAQ

Μπορώ να αφαιρέσω ένα επίπεδο;

Ναι — επαναπροσδιορίστε το image.Layers σε ένα φιλτραρισμένο πίνακα. Δεν μπορείτε να προσθέσετε ένα εντελώς νέο επίπεδο, επειδή το Layer δεν έχει δημόσιο κατασκευαστή· μόνο τα υπάρχοντα αναλυμένα επίπεδα μπορούν να διατηρηθούν, να αφαιρεθούν ή να αναδιαταχθούν.

Μπορώ να αλλάξω τα δεδομένα καναλιού ή μάσκας ενός επιπέδου;

Όχι. Τα ChannelInformation, LayerMaskData και LayerBlendingRangesData είναι μόνο για ανάγνωση — μόνο τα Name, IsVisible, Opacity, Clipping, BlendModeKey και τα άκρα των ορίων μπορούν να αλλάξουν.


API Reference Περίληψη

Κλάση/ΜέθοδοςΠεριγραφή
PsdImage.LayersΑποκτά ή ορίζει τη συλλογή στρωμάτων — ρυθμιζόμενο μόνο για αφαίρεση/αναδιάταξη
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightΥποστηριζόμενες επεξεργές μεταδεδομένων στρώματος
Layer.Bounds / Width / Height / ChannelsCountΓεωμετρία στρώματος μόνο για ανάγνωση
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataΜεταδεδομένα καναλιού/μάσκας/ανάμειξης μόνο για ανάγνωση

Δείτε επίσης

 Ελληνικά