چگونه بخش‌های سند PSD را در Python بررسی کنیم

چگونه بخش‌های سند PSD را در Python بررسی کنیم

یک PsdImage بارگذاری شده، اشیای خلاصهٔ فقط-خواندنی برای بخش‌های ساختاری یک سند PSD/PSB — شامل سرآیند، بخش رنگ، بخش تصویر و بخش منابع تصویر — را بدون نیاز به تجزیه‌وتحلیل بایت-سطح دستی فراهم می‌کند.

راهنمای گام به گام

گام ۱: نصب بسته

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

گام ۲: وارد کردن کلاس‌های مورد نیاز

from aspose_psd_foss.psdimage import PsdImage

گام ۳: بازرسی بخش سرآیند

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 فیلد حالت رنگ عدد صحیح خام را همان‌گونه که در فایل ذخیره شده است بازمی‌گرداند — اگر به مقدار enum با نوع قوی ColorModes نیاز دارید، به جای آن از PsdImage.color_mode استفاده کنید.


مرحلهٔ ۴: بخش داده‌های رنگ را بررسی کنید

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)}")

مرحلهٔ ۵: بخش داده‌های تصویر را بررسی کنید

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 همان رمزگذاری را از طریق enum جداگانهٔ CompressionMethod گزارش می‌دهد.


مرحلهٔ ۶: بخش منابع تصویر را بررسی کنید

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 در این ساختار FOSS — ببینید 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 هستند. هیچ setter عمومی برای هیچ‌یک از خصوصیات آن‌ها وجود ندارد.

تفاوت image.compression و image.image_data_kind چیست؟

آن‌ها همان کدگذاری پایه را از طریق دو enum جداگانه توصیف می‌کنند: image.compression یک مقدار CompressionMethod برمی‌گرداند، در حالی که image.image_data_info.kind یک مقدار ImageDataKind برمی‌گرداند.

همچنین ببینید:

 فارسی