Πώς να εργαστείτε με πόρους εικόνας PSD στο Python

Πώς να εργαστείτε με πόρους εικόνας PSD στο Python

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

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

Βήμα 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: Εισαγωγή των απαιτούμενων κλάσεων

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.resources.imageresourceids import ImageResourceIds

Βήμα 3: Έλεγχος και καταμέτρηση των πόρων εικόνας

image = PsdImage.load("input.psd")

print(f"Has image resources: {image.has_image_resources}")
print(f"Resource count: {image.resource_count}")

Βήμα 4: Καταγράψτε τα μπλοκ πόρων μέσω του image_resources

PsdImage.image_resources επιστρέφει ένα PreservedResourceBlock ανά πόρο, με το ακατέργαστο αναγνωριστικό πόρου, το όνομα και το μέγεθος σε byte:

for block in image.image_resources:
    print(f"ID: {block.id}, name: {block.name!r}, size: {block.size} bytes")

Αναγνωρίστε έναν συγκεκριμένο πόρο συγκρίνοντας το block.id με τις γνωστές σταθερές στο ImageResourceIds:

for block in image.image_resources:
    if block.id == ImageResourceIds.ICC_PROFILE:
        print(f"Found an ICC profile resource ({block.data_size} bytes)")

Ο αναλυτής πόρων αυτής της FOSS έκδοσης δεν αποκωδικοποιεί τα αναγνωριστικά πόρων σε σημασιολογικές ιδιότητες από μόνος του — η σύγκριση του block.id με το ImageResourceIds από εσάς είναι ο υποστηριζόμενος τρόπος για την αναγνώριση ενός συγκεκριμένου πόρου.


Βήμα 5: Καταγράψτε τις περιλήψεις πόρων μέσω του resources

PsdImage.resources επιστρέφει ξεχωριστή PsdResourceInfo περίληψη ανά πόρο, συμπεριλαμβανομένης μιας ταξινόμησης kind:

for info in image.resources:
    print(f"ID: {info.resource_id}, kind: {info.kind}, data length: {info.data_length}")

Σε αυτήν την FOSS έκδοση, το kind είναι πάντα PsdResourceKind.UNKNOWN — η σημασιολογική ταξινόμηση συγκεκριμένων τύπων πόρων (παγκόσμια γωνία, προφίλ ICC) δεν έχει υλοποιηθεί, έτσι αντιμετωπίστε το kind μόνο ως ενημερωτικό και βασιστείτε στο resource_id (Βήμα 4) για την αναγνώριση ενός συγκεκριμένου πόρου.


Βήμα 6: Διαβάστε μια ευρετηριασμένη παλέτα χρωμάτων

Εάν τα δεδομένα χρώματος του εγγράφου βασίζονται σε παλέτα, το PsdImage.indexed_palette επιστρέφει τις καταχωρήσεις του:

palette = image.indexed_palette

if palette is not None:
    print(f"Palette entries: {len(palette.entries)}")

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

image.indexed_palette is None. Ο τύπος των δεδομένων χρώματος του εγγράφου δεν είναι INDEXED_PALETTE — μόνο τα έγγραφα με ευρετήριο χρωμάτων έχουν παλέτα.

Setting image.image_resources raises NotSupportedException. Η μέθοδος ανάκτησης λειτουργεί για την καταγραφή πόρων, αλλά η μέθοδος ορισμού δεν υποστηρίζεται σε αυτήν την έκδοση FOSS.

Calling block.save() σε ένα PreservedResourceBlock raises NotImplementedError. Η αποθήκευση ατομικών μπλοκ πόρων άμεσα δεν υποστηρίζεται — οι πόροι κάνουν αυτόματη κυκλική μεταφορά όταν καλείτε image.save() στο ολόκληρο έγγραφο.

has_icc_profile, is_icc_profile_untagged, και global_angle ποτέ δεν αλλάζουν. Αυτά τα τρία PsdImage οι ιδιότητες είναι σταθερές τιμές κράτησης θέσης σε αυτή τη FOSS build (has_icc_profile είναι πάντα False, is_icc_profile_untagged είναι πάντα None, global_angle είναι πάντα 0) ανεξαρτήτως του πραγματικού περιεχομένου του φορτωμένου εγγράφου — ο parser πόρων αυτής της κατασκευής δεν αναδημιουργεί σημασιολογικές τιμές ειδικές για ID. Χρησιμοποιήστε το Step 4’s block.id σύγκριση με ImageResourceIds εάν χρειαστεί να ανιχνεύσετε αυτούς τους πόρους μόνοι σας.

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

Ποια είναι η διαφορά μεταξύ image_resources και resources?

Και τα δύο παραθέτουν τα ίδια υποκείμενα μπλοκ πόρων, αλλά ως διαφορετικούς τύπους αντικειμένων: image_resources επιστρέφει αντικείμενα PreservedResourceBlock (ακατέργαστο ID/όνομα/μέγεθος, χρησιμοποιείται για round-tripping), ενώ resources επιστρέφει περιλήψεις PsdResourceInfo (προσθέτει μια ταξινόμηση kind, η οποία αυτή τη στιγμή είναι πάντα UNKNOWN).

Μπορώ να τροποποιήσω ή να αφαιρέσω έναν πόρο εικόνας;

Όχι — η setter του image_resources προκαλεί NotSupportedException, και το PreservedResourceBlock.save() προκαλεί NotImplementedError αν κληθεί άμεσα. Οι πόροι είναι μόνο για ανάγνωση σε αυτή τη FOSS build.

Δείτε επίσης

 Ελληνικά