วิธีทำงานกับชั้น PSD ใน Python
คู่มือนี้แสดงวิธีการแสดงรายการเลเยอร์ของเอกสาร, อ่านและเปลี่ยนเมตาดาต้าเลเยอร์ที่สามารถแก้ไขได้, ย้ายตำแหน่งเลเยอร์, และลบเลเยอร์ออกจากคอลเลกชัน. คุณสมบัติ layers ของ PsdImage ที่โหลดแล้วจะคืนค่าคอลเลกชันของวัตถุ Layer. แต่ละ Layer จะเปิดเผยเมตาดาต้าที่สามารถแก้ไขได้ — ชื่อ, การมองเห็น, ความทึบ, การคลิป, โหมดผสม, และตำแหน่ง (ขอบของขอบเขต) — รวมถึงขอบเขตโดยรวมและข้อมูลช่องสัญญาณที่เป็นแบบอ่านอย่างเดียว.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 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 โหลดเอกสาร; BlendMode จะถูกใช้ภายหลังเพื่อกำหนดโหมดผสมของเลเยอร์:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModeขั้นตอนที่ 3: โหลดเอกสารและแสดงรายการชั้น
โหลดเอกสารแล้ววนซ้ำ layers เพื่อดูชื่อและรูปทรงของแต่ละชั้น:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")ขั้นตอนที่ 4: อ่านและแก้ไขการมองเห็นของชั้น, ความทึบแสง, และโหมดผสม
is_visible, opacity (โดยทั่วไป 0-255), clipping, name และ blend_mode_key มีตัวตั้งค่าที่ทำงานได้ทั้งหมด:
layer = image.layers[0]
layer.is_visible = False # hide the layer
layer.opacity = 200 # ~78% opacity
layer.blend_mode_key = BlendMode.MULTIPLY
layer.name = "Renamed Layer"ขั้นตอนที่ 5: อ่านและปรับตำแหน่งขอบเขตของชั้น
bounds, width, height และ channels_count เป็นแบบอ่านอย่างเดียว — แต่ top, left, bottom และ right แต่ละตัวมีตัวตั้งค่าที่ทำงานได้ซึ่งปรับตำแหน่งของชั้น:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60ขั้นตอนที่ 6: แทนที่คอลเลกชันของชั้น
PsdImage.layers เองมีตัวตั้งค่าที่ทำงานได้ ดังนั้นคุณสามารถแทนที่คอลเลกชันทั้งหมด (เช่น เพื่อลบชั้นหนึ่ง):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]ขั้นตอนที่ 7: บันทึกเอกสาร
บันทึกการแก้ไขทั้งหมดที่ทำในขั้นตอนก่อนหน้ากลับไปยังดิสก์, จากนั้นปล่อยทรัพยากรของภาพ:
image.save("output.psd")
image.dispose()ปัญหาทั่วไปและการแก้ไข
NotSupportedException เมื่อกำหนดค่า channel_information, layer_mask_data, หรือ layer_blending_ranges_data. สามตัวนี้ Layer ตัวตั้งค่าไม่รองรับในรุ่น FOSS นี้ — ให้ถือว่าเป็นแบบอ่านอย่างเดียว.
ค่าความทึบดูเหมือนผิดพลาดหลังจากกำหนดค่า. opacity โดยทั่วไปเป็นค่าช่วง 0-255 ไม่ใช่เศษส่วน 0.0-1.0 หรือเปอร์เซ็นต์ — layer.opacity = 200 หมายถึงความทึบประมาณ 78% (200/255).
การเปลี่ยนแปลงในเลเยอร์ไม่แสดงหลังจากบันทึก. ยืนยันว่าคุณกำลังแก้ไข Layer อินสแตนซ์ที่ได้จาก image.layers, และว่าคุณเรียก image.save() หลังจากทำการแก้ไขของคุณ.
คำถามที่พบบ่อย
ฉันสามารถลบเลเยอร์จากเอกสารได้หรือไม่?
ได้ — PsdImage.layers มี setter ที่ทำงานได้, ดังนั้นคุณสามารถกำหนดรายการที่กรองแล้วให้มันเพื่อลบเลเยอร์ (ดูขั้นตอนที่ 6).
มีโหมดผสมอะไรบ้าง?
BlendMode มีค่าต่าง ๆ เช่น NORMAL, MULTIPLY, SCREEN, OVERLAY และ DARKEN รวมถึงอื่น ๆ — ตั้งค่าผ่าน Layer.blend_mode_key.
ข้อมูลมาสก์เลเยอร์พร้อมใช้งานหรือไม่?
Layer.layer_mask_data มี getter ที่ทำงานได้, แต่ setter ของมันทำให้เกิด NotSupportedException ในการสร้าง FOSS นี้.