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 | Μεταδεδομένα καναλιού/μάσκας/ανάμειξης μόνο για ανάγνωση |