كيفية فحص أقسام مستند PSD في Python

كيفية فحص أقسام مستند PSD في Python

يُظهر PsdImage المحمَّل كائنات ملخص للقراءة فقط للأقسام الهيكلية لوثيقة PSD/PSB — الرأس، قسم بيانات اللون، قسم بيانات الصورة، وقسم موارد الصورة — دون الحاجة إلى أي تحليل يدوي على مستوى البايت.

دليل خطوة بخطوة

الخطوة 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

الخطوة 3: فحص قسم الرأس

PsdImage.header تُرجِع PsdHeader مع الحقول الهيكلية الخام للوثيقة:

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

header = image.header
print(f"Size: {header.width}x{header.height}, channels: {header.channels}")
print(f"Bit depth: {header.bit_depth}, raw color mode: {header.color_mode}")
print(f"Is PSB: {header.is_large_document}")

PsdHeader.color_mode تُرجِع حقل وضع اللون الصحيح كعدد صحيح كما هو مخزن في الملف — استخدم PsdImage.color_mode بدلاً من ذلك إذا كنت تحتاج إلى تعداد ColorModes القوي النوع.


الخطوة 4: فحص قسم بيانات اللون

PsdImage.color_data_info تُرجِع ملخّص PsdColorDataInfo; kind هي قيمة PsdColorDataKind (NONE، INDEXED_PALETTE، RGB_PAYLOAD، CMYK_PAYLOAD أو RAW_PRESERVED):

if image.has_color_mode_data:
    color_info = image.color_data_info
    print(f"Color data kind: {color_info.kind}, raw bytes: {color_info.raw_data_length}")

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

الخطوة 5: فحص قسم بيانات الصورة

PsdImage.image_data_info تُرجِع ملخّص PsdImageDataInfo يصف كيفية ترميز بيانات البكسل المدمجة:

data_info = image.image_data_info
print(f"Compression: {image.compression}")
print(f"Data kind: {data_info.kind}, uses prediction: {data_info.uses_prediction}")
print(f"Compressed payload length: {data_info.compressed_payload_length}")

data_info.kind هي قيمة ImageDataKind (RAW، RLE، ZIP أو UNKNOWN) تصف ترميز بيانات الصورة المدمجة نفسها — image.compression تُبلغ عن نفس الترميز عبر تعداد CompressionMethod المنفصل.


الخطوة 6: فحص قسم موارد الصورة

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

for resource in image.resources:
    print(f"Resource ID: {resource.resource_id}, kind: {resource.kind}")

PsdImage.resources يرجع للقراءة فقط PsdResourceInfo ملخصات. المفصل PsdImage.image_resources الخاصية لديها أيضًا دالة جلب، لكن مُعدِّلها يرفع NotSupportedException في هذا البناء المفتوح المصدر — انظر Troubleshooting للقائمة الكاملة للمُعدِّلات للقراءة فقط.

المشكلات الشائعة والحلول

header.color_mode لا يتطابق image.color_mode. هذا متوقع — PsdHeader.color_mode هو حقل العدد الصحيح الخام من الملف، بينما PsdImage.color_mode هو النوع القوي ColorModes enum تم إنشاؤه منه.

color_data_info.indexed_palette is None. نوع بيانات اللون للمستند ليس INDEXED_PALETTE — فقط المستندات ذات اللون المفهرس تحمل لوحة ألوان.

Setting image.image_resources raises NotSupportedException. هذا المعين غير مدعوم في هذا الإصدار المفتوح المصدر؛ اعتبر image_resources and resources للقراءة فقط.

الأسئلة المتكررة

هل يمكنني تعديل أقسام الرأس أو بيانات اللون أو بيانات الصورة مباشرةً؟

لا — PsdHeader، PsdColorDataInfo، ColorData، وPsdImageDataInfo كلها كائنات ملخص للقراءة فقط في هذا البناء المفتوح المصدر (FOSS). لا توجد أي مُعيِّنات عامة على أي من خصائصها.

ما الفرق بين image.compression وimage.image_data_kind؟

إنهما يصفان الترميز الأساسي نفسه عبر تعدادين منفصلين: image.compression تُعيد قيمة CompressionMethod، بينما image.image_data_info.kind تُعيد قيمة ImageDataKind.

انظر أيضاً

 العربية