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 | متادیتای کانال/ماسک/ترکیب فقطخواندنی |