Πώς να εργαστείτε με στρώματα PSD στο Python
Αυτός ο οδηγός δείχνει πώς να παραθέσετε τα επίπεδα ενός εγγράφου, να διαβάσετε και να αλλάξετε επεξεργάσιμα μεταδεδομένα επιπέδου, να μετατοπίσετε ένα επίπεδο και να αφαιρέσετε ένα επίπεδο από τη συλλογή. Η ιδιότητα layers ενός φορτωμένου PsdImage επιστρέφει τη συλλογή των αντικειμένων Layer. Κάθε Layer εκθέτει επεξεργάσιμα μεταδεδομένα — όνομα, ορατότητα, διαφάνεια, αποκοπή, λειτουργία ανάμειξης και θέση (άκρα ορίων) — καθώς και μόνο για ανάγνωση συνολικά όρια και πληροφορίες καναλιών.
Οδηγός βήμα-βήμα
Βήμα 1: Εγκατάσταση του πακέτου
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATHΒήμα 2: Εισαγωγή των απαιτούμενων κλάσεων
PsdImage φορτώνει το έγγραφο· BlendMode χρησιμοποιείται αργότερα για να ορίσει τη λειτουργία ανάμειξης ενός επιπέδου:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModeΒήμα 3: Φόρτωση εγγράφου και λίστα των επιπέδων του
Φορτώστε το έγγραφο, έπειτα επαναλάβετε layers για να δείτε το όνομα και τη γεωμετρία κάθε επιπέδου:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")Βήμα 4: Ανάγνωση και επεξεργασία ορατότητας, αδιαφάνειας και τρόπου ανάμειξης επιπέδου
is_visible, opacity (συνηθισμένα 0-255), clipping, name και blend_mode_key έχουν όλοι λειτουργικές ρυθμίσεις:
layer = image.layers[0]
layer.is_visible = False # hide the layer
layer.opacity = 200 # ~78% opacity
layer.blend_mode_key = BlendMode.MULTIPLY
layer.name = "Renamed Layer"Βήμα 5: Ανάγνωση και επανατοποθέτηση ορίων επιπέδου
bounds, width, height και channels_count είναι μόνο για ανάγνωση — αλλά top, left, bottom και right καθένα διαθέτει λειτουργική ρύθμιση που επανατοποθετεί το επίπεδο:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60Βήμα 6: Αντικατάσταση της συλλογής επιπέδων
Το ίδιο το PsdImage.layers διαθέτει λειτουργική ρύθμιση, έτσι μπορείτε να αντικαταστήσετε ολόκληρη τη συλλογή (π.χ., για να αφαιρέσετε ένα επίπεδο):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]Βήμα 7: Αποθήκευση του Εγγράφου
Αποθηκεύστε κάθε επεξεργασία που έγινε στα προηγούμενα βήματα στο δίσκο, έπειτα απελευθερώστε τους πόρους της εικόνας:
image.save("output.psd")
image.dispose()Κοινά Προβλήματα και Διορθώσεις
NotSupportedException κατά τη ρύθμιση channel_information, layer_mask_data, ή layer_blending_ranges_data. Αυτά τα τρία Layer οι setters δεν υποστηρίζονται σε αυτήν τη FOSS build — αντιμετωπίστε τα ως read-only.
Η τιμή αδιαφάνειας φαίνεται λανθασμένη μετά τη ρύθμισή της. opacity είναι συμβατικά μια τιμή 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.blend_mode_key.
Είναι διαθέσιμα τα δεδομένα μάσκας στρώματος;
Layer.layer_mask_data έχει λειτουργικό getter, αλλά το setter του προκαλεί NotSupportedException σε αυτήν την έκδοση FOSS.