Python में PSD इमेज रिसोर्सेज के साथ कैसे काम करें

Python में PSD इमेज रिसोर्सेज के साथ कैसे काम करें

लोड किया गया 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 लौटाता है, जिसमें कच्चा संसाधन ID, नाम, और बाइट आकार शामिल होते हैं:

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 बिल्ड का संसाधन पार्सर स्वयं संसाधन ID को अर्थपूर्ण गुणों में डिकोड नहीं करता — 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 बिल्ड में स्थिर प्लेसहोल्डर मान हैं (has_icc_profile है हमेशा False, is_icc_profile_untagged है हमेशा None, global_angle है हमेशा 0) लोड किए गए दस्तावेज़ की वास्तविक सामग्री की परवाह किए बिना — इस बिल्ड के रिसोर्स पार्सर ID-विशिष्ट सेमेंटिक वैल्यूज़ को पुनर्निर्मित नहीं करता। Use Step 4’s block.id की तुलना ImageResourceIds यदि आपको इन संसाधनों को स्वयं पहचानना है।

अक्सर पूछे जाने वाले प्रश्न

image_resources और resources के बीच क्या अंतर है?

दोनों एक ही अंतर्निहित संसाधन ब्लॉकों की सूची देते हैं, लेकिन अलग-अलग ऑब्जेक्ट प्रकारों के रूप में: image_resources PreservedResourceBlock ऑब्जेक्ट्स लौटाता है (कच्चा ID/नाम/आकार, राउंड-ट्रिपिंग के लिए उपयोग किया जाता है), जबकि resources PsdResourceInfo सारांश लौटाता है (एक kind वर्गीकरण जोड़ता है, वर्तमान में हमेशा UNKNOWN)।

क्या मैं इमेज रिसोर्स को संशोधित या हटा सकता हूँ?

नहीं — image_resources का setter NotSupportedException उठाता है, और PreservedResourceBlock.save() सीधे कॉल करने पर NotImplementedError उठाता है। इस FOSS बिल्ड में संसाधन केवल-पढ़ने योग्य हैं।

यह भी देखें

 हिन्दी