วิธีทำงานกับชั้น PSD ใน Python

วิธีทำงานกับชั้น 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 นี้.

ดูเพิ่มเติม

 ภาษาไทย