Layers
Layers
PsdImage.layers คืนค่าทุกเลเยอร์ที่แยกวิเคราะห์เป็นรายการของอ็อบเจ็กต์ Layer. แต่ละ Layer จะเปิดเผยเรขาคณิต, การมองเห็นและสถานะการผสมของตนเอง, พร้อมกับเมตาดาต้าเกี่ยวกับช่องสัญญาณ, มาสก์, และช่วงการผสมสี.
การอ่านเมตาดาต้าเลเยอร์
name, bounds (และ width/height/top/left/bottom/right ที่สืบทอด), is_visible, opacity, clipping, blend_mode_key, และ channels_count สามารถอ่านได้โดยตรง.
from aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
for layer in image.layers:
print(f"{layer.name}: {layer.bounds}, "
f"Visible={layer.is_visible}, Opacity={layer.opacity}, "
f"BlendMode={layer.blend_mode_key}")การแก้ไขเมตาดาต้าที่รองรับ
name, is_visible, opacity, clipping, blend_mode_key, และขอบเขตสี่ด้าน (top/left/bottom/right) สามารถเปลี่ยนแปลงได้ตรงตำแหน่งและเขียนกลับด้วย PsdImage.save().
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendMode
with PsdImage.load("input.psd") as image:
layer = image.layers[0]
layer.name = f"{layer.name} (edited)"
layer.is_visible = not layer.is_visible
layer.opacity = 128
layer.blend_mode_key = BlendMode.MULTIPLY
image.save("output.psd")เมตาดาต้าช่องสัญญาณและมาสก์
channel_information, layer_mask_data, และ layer_blending_ranges_data เป็นแบบอ่านอย่างเดียวในรุ่น FOSS นี้ — ตัวตั้งค่าของพวกมันจะโยน NotSupportedException.
layer = image.layers[0]
for channel in layer.channel_information:
print(f"Channel {channel.ChannelID}: {channel.compression_method}, {channel.length} bytes")
if layer.has_mask_data:
mask = layer.layer_mask_data
print(f"Mask bounds: {mask.mask_rectangle}, flags: {mask.flags}")การลบหรือจัดเรียงลำดับเลเยอร์ใหม่
PsdImage.layers มีทั้งตัวตั้งค่าและตัวรับค่า: การกำหนดรายการที่กรองหรือจัดเรียงใหม่จะทำการแทนที่คอลเลกชันเลเยอร์ของเอกสาร.
from aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
image.layers = [layer for layer in image.layers if layer.is_visible]
image.save("output.psd")เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- เข้าถึง
image.layersตามตำแหน่ง; ลำดับของรายการตรงกับลำดับเลเยอร์ของเอกสารเอง. blend_mode_keyยอมรับค่า enumBlendModeใดก็ได้ — ไม่ได้ทำการตรวจสอบกับโหมดสีที่ประกาศในเอกสาร.channel_information,layer_mask_data, และlayer_blending_ranges_dataสามารถอ่านได้แต่ไม่สามารถกำหนดค่าใหม่ได้.- เรียก
PsdImage.save()ครั้งเดียวหลังจากแก้ไขทั้งหมด; การเรียกแต่ละครั้งจะเขียนเอกสารเต็ม.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
NotSupportedException เมื่อกำหนดค่า channel_information, layer_mask_data หรือ layer_blending_ranges_data | คุณสมบัติทั้ง 3 นี้เป็นแบบอ่านอย่างเดียวในรุ่น FOSS แม้ว่าจะมี setter | อ่านค่าที่ได้; อย่าพยายามกำหนดค่าใหม่ |
layer_mask_data การเข้าถึงเมื่อไม่มีมาสก์ | ไม่ใช่ทุกเลเยอร์มีส่วนย่อยของมาสก์ | ตรวจสอบ layer.has_mask_data ก่อนอ่าน layer.layer_mask_data |
FAQ
ฉันสามารถลบเลเยอร์ได้หรือไม่?
ใช่ — กำหนดค่า image.layers ใหม่เป็นรายการที่กรองแล้ว.
ฉันสามารถเปลี่ยนข้อมูลช่องหรือมาสก์ของเลเยอร์ได้หรือไม่?
ไม่. channel_information, layer_mask_data และ layer_blending_ranges_data เป็นแบบอ่านอย่างเดียว — เฉพาะ name, is_visible, opacity, clipping, blend_mode_key และขอบเขตสามารถเปลี่ยนแปลงได้.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
PsdImage.layers | รับหรือกำหนดชุดชั้น — สามารถตั้งค่าเพื่อการลบ/การจัดลำดับใหม่ |
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / right | การแก้ไขเมตาดาต้าชั้นที่รองรับ |
Layer.bounds / width / height / channels_count | เรขาคณิตชั้นแบบอ่านอย่างเดียว |
Layer.channel_information / layer_mask_data / layer_blending_ranges_data | เมตาดาต้าช่อง/มาสก์/การผสมแบบอ่านอย่างเดียว |