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 ยอมรับค่า enum BlendMode ใดก็ได้ — ไม่ได้ทำการตรวจสอบกับโหมดสีที่ประกาศในเอกสาร.
  • 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เมตาดาต้าช่อง/มาสก์/การผสมแบบอ่านอย่างเดียว

ดูเพิ่มเติม

 ภาษาไทย