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 هم یک setter و هم یک getter دارد: اختصاص یک لیست فیلترشده یا بازچینش‌شده، مجموعهٔ لایه‌های سند را جایگزین می‌کند.

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این ۳ ویژگی در نسخهٔ FOSS فقط-خواندنی هستند، حتی اگر setter داشته باشندمقدار را بخوانید؛ سعی نکنید آن را دوباره اختصاص دهید
دسترسی layer_mask_data در زمانی که ماسکی وجود نداردهر لایه‌ای زیرمجموعهٔ ماسک نداردقبل از خواندن layer.layer_mask_data، layer.has_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متادیتای کانال/ماسک/ترکیب فقط‌خواندنی

همچنین ببینید:

 فارسی