วิธีบันทึกและส่งออกเอกสาร PSD ใน Python

วิธีบันทึกและส่งออกเอกสาร PSD ใน Python

คู่มือนี้แสดงวิธีการบันทึกเอกสารที่แก้ไขแล้วไปยังเส้นทางไฟล์, ไปยังสตรีมที่เปิดอยู่, และวิธีการทำลายภาพที่โหลดไว้หลังจากนั้น PsdImage.save เป็นจุดเข้าถึงสาธารณะเดียวสำหรับการเขียนเอกสารออกใหม่ — มันรับทั้งเส้นทางไฟล์หรือสตรีมที่เขียนได้ที่เปิดอยู่แล้ว ตัวเขียนส่วนย่อยระดับต่ำที่ทำการเข้ารหัสไบต์จริงเป็นรายละเอียดการทำงานภายใน ไม่ใช่สิ่งที่คุณเรียกใช้โดยตรง.

คู่มือแบบขั้นตอนต่อขั้นตอน

ขั้นตอนที่ 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: นำเข้าคลาสที่จำเป็น

PsdImage เป็นคลาสเดียวที่ตัวอย่างในคู่มือนี้ต้องการ:

from aspose_psd_foss.psdimage import PsdImage

ขั้นตอนที่ 3: บันทึกไปยังเส้นทางไฟล์

โหลดเอกสาร ทำการแก้ไข แล้วบันทึกกลับไปยังเส้นทางไฟล์:

image = PsdImage.load("input.psd")
image.layers[0].is_visible = False
image.save("output.psd")

ขั้นตอนที่ 4: บันทึกไปยังสตรีมที่เปิดอยู่

การส่งสตรีมแทนเส้นทางทำให้สตรีมค้างเปิดหลังจากบันทึก — คุณเป็นผู้ควบคุมว่าจะปิดเมื่อใด:

with open("output.psd", "wb") as stream:
    image.save(stream)

ขั้นตอนที่ 5: ปล่อย Image

ปล่อยทรัพยากรที่ PsdImage ที่โหลดไว้ถือไว้เมื่อคุณเสร็จสิ้นการใช้งาน:

image.dispose()

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

RuntimeError: PsdImage has been disposed. เมื่อเรียกใช้ save. ภาพได้ถูกทำลายแล้ว (ผ่าน dispose() หรือ with บล็อกที่ออก) ก่อน save ถูกเรียกใช้แล้ว เรียก save ก่อนทำลาย.

PsdSaveException เกี่ยวกับความยาวของสตริง Pascal. ค่าสตริงเกิน 255 ไบต์ — ดู การจัดการข้อยกเว้นของ PSD Core and Troubleshooting.

ไม่มีวิธีบังคับให้บันทึกเป็นคอนเทนเนอร์ PSD หรือ PSB. ไม่มี API สาธารณะเพื่อเลือกรูปแบบคอนเทนเนอร์ผลลัพธ์ — การบันทึกจะสะท้อนรูปแบบใดก็ตามที่ (is_large_document / is_psb) เอกสารถูกโหลดมา หากคุณต้องการรูปแบบคอนเทนเนอร์ที่แตกต่างกัน จะไม่มีเส้นทางการแปลงที่สนับสนุนในรุ่น FOSS นี้.

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

การบันทึกลงสตรีมจะปิดสตรีมหลังจากนั้นหรือไม่?

ไม่ — เมื่อคุณส่งสตรีมไปยัง save, สตรีมจะเหลือเปิดอยู่หลังจากนั้นเพื่อให้คุณควบคุมวงจรชีวิตของมัน (ดูขั้นตอนที่ 4). การบันทึกลงพาธไฟล์, ในทางตรงกันข้าม, จะเปิดและปิดไฟล์ภายใน.

ฉันสามารถเรียกตัวเขียนส่วนภายในโดยตรงแทน save ได้หรือไม่?

ไม่ — ตัวเขียนระดับส่วนเป็นรายละเอียดการดำเนินการภายในที่ถูกเรียกโดย PsdImage.save. ไม่มีวิธีที่ได้รับการบันทึกหรือรองรับในการเขียนเอกสารนอกเหนือจากการเรียก save บนอินสแตนซ์ของ PsdImage.

ดูเพิ่มเติม

 ภาษาไทย