Πώς να εργαστείτε με στρώματα PSD στο .NET

Πώς να εργαστείτε με στρώματα PSD στο .NET

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

Οδηγός βήμα-βήμα

Βήμα 1: Εγκατάσταση του πακέτου

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet build

Βήμα 2: Εισαγωγή των απαιτούμενων κλάσεων

Οι μέθοδοι επέκτασης LINQ που χρησιμοποιούνται αργότερα (Where) προέρχονται από το System.Linq; οι τύποι ειδικοί για PSD προέρχονται από τα δύο ονόματα χώρου Aspose.PSD παρακάτω.

using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;

Βήμα 3: Φόρτωση εγγράφου και απαρίθμηση των στρωμάτων

Φορτώστε το έγγραφο, έπειτα επαναλάβετε Layers για να δείτε το όνομα και τη γεωμετρία κάθε στρώματος:

using var image = PsdImage.Load("input.psd");

foreach (var layer in image.Layers)
{
    Console.WriteLine($"{layer.Name}: {layer.Width}x{layer.Height} at ({layer.Left},{layer.Top})");
}

Βήμα 4: Ανάγνωση και επεξεργασία ορατότητας, αδιαφάνειας και τρόπου ανάμειξης του στρώματος

IsVisible, Opacity (0-255), Clipping, Name και BlendModeKey έχουν όλοι λειτουργικά setters:

var layer = image.Layers[0];

layer.IsVisible = false;          // hide the layer
layer.Opacity = 200;              // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";

Βήμα 5: Ανάγνωση και επανατοποθέτηση των ορίων του στρώματος

Bounds, Width, Height και ChannelsCount είναι μόνο για ανάγνωση — αλλά Top, Left, Bottom και Right καθένα έχει έναν λειτουργικό setter που επανατοποθετεί το στρώμα:

Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");

layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;

Βήμα 6: Αντικατάσταση της συλλογής στρωμάτων

PsdImage.Layers από μόνο του έχει έναν λειτουργικό setter, έτσι μπορείτε να αντικαταστήσετε ολόκληρη τη συλλογή (π.χ., για να αφαιρέσετε ένα στρώμα):

image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();

Βήμα 7: Αποθήκευση του εγγράφου

Αποθηκεύστε κάθε επεξεργασία που έγινε στα προηγούμενα βήματα στον δίσκο:

image.Save("output.psd");

Κοινά προβλήματα και διορθώσεις

NotSupportedException όταν ρυθμίζεται ChannelInformation, LayerMaskData, ή LayerBlendingRangesData. Αυτά τα τρία Layer οι setters δεν υποστηρίζονται σε αυτήν την έκδοση FOSS — αντιμετωπίστε τα ως μόνο για ανάγνωση.

Η τιμή της αδιαφάνειας φαίνεται λανθασμένη μετά τη ρύθμιση της. Opacity είναι ένα byte (0-255), όχι κλάσμα 0.0-1.0 ή ποσοστό — layer.Opacity = 200 σημαίνει περίπου 78% αδιαφάνεια (200/255).

Οι αλλαγές σε ένα στρώμα δεν εμφανίζονται μετά την αποθήκευση. Επιβεβαιώστε ότι τροποποιείτε το Layer αντίγραφο που προέρχεται από image.Layers, και ότι καλείτε image.Save μετά τις επεμβάσεις σας.

Συχνές ερωτήσεις

Μπορώ να αφαιρέσω ένα στρώμα από ένα έγγραφο;

Ναι — PsdImage.Layers διαθέτει έναν λειτουργικό setter, ώστε μπορείτε να του αναθέσετε έναν φιλτραρισμένο πίνακα για να αφαιρέσετε στρώματα (δείτε το Βήμα 6).

Ποιοι τρόποι ανάμειξης είναι διαθέσιμοι;

BlendMode περιλαμβάνει τιμές όπως Normal, Multiply, Screen, Overlay και Darken, μεταξύ άλλων — ορίζονται μέσω Layer.BlendModeKey.

Είναι διαθέσιμα δεδομένα μάσκας στρώματος;

Layer.LayerMaskData διαθέτει έναν λειτουργικό getter, αλλά ο setter του ρίχνει NotSupportedException σε αυτήν την έκδοση FOSS.

Δείτε επίσης

 Ελληνικά