วิธีบันทึกและส่งออกเอกสาร 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.