วิธีตรวจสอบส่วนของเอกสาร 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 แทนหากคุณต้องการ enum 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 รายงานการเข้ารหัสเดียวกันผ่าน enum 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 คุณสมบัตินี้ยังมี getter, แต่ setter ของมันทำให้เกิดข้อผิดพลาด NotSupportedException ใน build FOSS นี้ — ดู Troubleshooting สำหรับรายการเต็มของ setter ที่เป็นแบบอ่านอย่างเดียว.

ปัญหาทั่วไปและวิธีแก้ไข

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. ตัวตั้งค่านี้ไม่รองรับในรุ่น FOSS นี้; ให้ถือว่า image_resources and resources เป็นแบบอ่านอย่างเดียว.

คำถามที่พบบ่อย

ฉันสามารถแก้ไขส่วนหัว, ข้อมูลสี หรือส่วนข้อมูลภาพโดยตรงได้หรือไม่?

ไม่ — PsdHeader, PsdColorDataInfo, ColorData และ PsdImageDataInfo ทั้งหมดเป็นอ็อบเจ็กต์สรุปแบบอ่านอย่างเดียวในรุ่น FOSS นี้ ไม่มีกำหนดค่าตั้งสาธารณะบนคุณสมบัติใด ๆ ของพวกมัน.

อะไรคือความแตกต่างระหว่าง image.compression และ image.image_data_kind?

พวกเขาอธิบายการเข้ารหัสพื้นฐานเดียวกันผ่านสอง enum แยกกัน: image.compression ส่งคืนค่า CompressionMethod, ในขณะที่ image.image_data_info.kind ส่งคืนค่า ImageDataKind.

ดูเพิ่มเติม

 ภาษาไทย