บทนำ

Aspose.PSD FOSS สำหรับ Python โหลด ตรวจสอบ และบันทึกเอกสาร PSD และ PSB ผ่านชุดคลาสเล็ก ๆ. โพสต์นี้จะพิจารณาส่วนของ API แกนหลักที่โพสต์แนะนำไม่ได้ครอบคลุมอย่างละเอียด: วิธีที่ Image และ PsdImage เชื่อมโยงกัน, ประเภทค่าทางเรขาคณิตที่ใช้ทั่วไลบรารี, และวิธีที่ไลบรารีรายงานข้อผิดพลาดการโหลดและบันทึก.


สิ่งที่รวมอยู่

ภาพและ PsdImage

Image เป็นคลาสฐานเชิงนามธรรมที่มีขนาดเล็กที่สุด: มันกำหนดเพียง load() ซึ่งตรวจสอบอินพุตและคืนคลาสย่อยที่เป็นรูปธรรม — สำหรับอินพุต PSD/PSB คลาสย่อยนั้นคือ PsdImage. พื้นผิวเอกสารเต็มรูปแบบ — color_mode, version, layers, compression, bits_per_channel, size และอื่น ๆ — อยู่บน PsdImage เอง ไม่ได้อยู่บนฐาน Image.

from aspose_psd_foss.image import Image
from aspose_psd_foss.psdimage import PsdImage

with Image.load("input.psd") as image:
    assert isinstance(image, PsdImage)
    print(f"ColorMode: {image.color_mode}, Version: {image.version}")
    print(f"Size: {image.size}, Layers: {image.layer_count}")

ประเภทค่าทางเรขาคณิต

Point, Size, Rectangle และ RectangleF เป็นประเภทค่าที่ใช้สำหรับพิกัดและขนาดทั่ว API — Layer.bounds เป็น Rectangle และ PsdImage.size เป็น Size. Rectangle มีเมธอดเรขาคณิตจริง: contains(), intersect_rect(), union_rect(), inflate(), และ from_left_top_right_bottom() รวมถึงอื่น ๆ.

from aspose_psd_foss.rectangle import Rectangle

layer_bounds = image.layers[0].bounds
fully_inside = layer_bounds.contains(Rectangle(0, 0, 10, 10))
overlap = Rectangle.intersect_rect(layer_bounds, Rectangle(0, 0, 100, 100))
print(f"Contains (0,0,10,10): {fully_inside}, overlap: {overlap}")

บล็อกทรัพยากรและข้อยกเว้น

PsdImage.image_resources ส่งคืนรายการที่ถูกแยกวิเคราะห์ของอ็อบเจ็กต์ ResourceBlock — แต่ละอ็อบเจ็กต์เปิดเผย id, name, data_size และ signature. ในการสร้าง FOSS นี้, image_resources, global_layer_resources, active_layer และ has_transparency_data สามารถอ่านได้แต่ไม่สามารถกำหนดค่าใหม่ได้ — แต่ละตัวมี setter ที่จะโยน NotSupportedException หากถูกเรียกใช้, ดังนั้นให้ถือว่าเป็นแบบอ่านอย่างเดียวแม้ว่าจะปรากฏเป็นคุณสมบัติทั่วไป.

ข้อผิดพลาดในการโหลดและบันทึกปรากฏเป็นสองประเภทของข้อยกเว้นเฉพาะ: PsdLoadException เมื่อไม่สามารถแยกวิเคราะห์เอกสารได้, และ PsdSaveException เมื่อไม่สามารถเขียนเอกสารกลับออกได้.

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException

try:
    with PsdImage.load("input.psd") as image:
        for resource in image.image_resources:
            print(f"Resource {resource.id}: {resource.name} ({resource.data_size} bytes)")
except PsdLoadException as ex:
    print(f"Failed to load input.psd: {ex}")

เริ่มต้นอย่างรวดเร็ว

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
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException

try:
    with PsdImage.load("input.psd") as image:
        print(f"Size: {image.size}, ColorMode: {image.color_mode}")
        print(f"ImageResources: {image.resource_count}")
except PsdLoadException as ex:
    print(f"Load failed: {ex}")

รูปแบบที่รองรับ

รูปแบบส่วนขยายอ่านเขียน
PSDpsd✓✓
PSBpsb✓✓

โอเพ่นซอร์สและการให้สิทธิ์

Aspose.PSD FOSS สำหรับ Python มีสัญญาอนุญาต MIT และสามารถใช้ในผลิตภัณฑ์เชิงพาณิชย์ได้โดยไม่มีค่าลิขสิทธิ์, ไม่มีลายน้ำประเมินหรือขีดจำกัดการใช้งาน.

ไลบรารีไม่มีการพึ่งพาเนทีฟจากบุคคลที่สามเลย — ต้องการเฉพาะไลบรารีมาตรฐานของ Python เท่านั้นในเวลารันไทม์.


เริ่มต้นใช้งาน

แหล่งข้อมูลที่เกี่ยวข้อง