چگونه با لایه‌های PSD در Python کار کنیم

چگونه با لایه‌های PSD در Python کار کنیم

این راهنما نشان می‌دهد چگونه لایه‌های یک سند را فهرست کنیم، فراداده‌های قابل ویرایش لایه را بخوانیم و تغییر دهیم، یک لایه را دوباره موقعیت‌دهی کنیم و لایه‌ای را از مجموعه حذف کنیم. ویژگی layers یک PsdImage بارگذاری شده، مجموعهٔ اشیاء Layer آن را برمی‌گرداند. هر Layer فراداده‌های قابل ویرایش — نام، نمایانی، شفافیت، کلیپینگ، حالت ترکیب و موقعیت (لبه‌های محدوده) — را در اختیار می‌گذارد و علاوه بر آن، محدوده کلی فقط-خواندنی و اطلاعات کانال را نیز ارائه می‌دهد.

راهنمای گام به گام

مرحله ۱: نصب بسته

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

مرحله ۲: وارد کردن کلاس‌های مورد نیاز

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 همگی setterهای عملی دارند:

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 هر کدام setter عملی دارند که موقعیت لایه را تغییر می‌دهد:

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 خود دارای setter عملی است، بنابراین می‌توانید کل مجموعه را جایگزین کنید (مثلاً برای حذف یک لایه):

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 کارا است، بنابراین می‌توانید به آن یک لیست فیلتر شده اختصاص دهید تا لایه‌ها را حذف کنید (به گام ۶ مراجعه کنید).

کدام حالت‌های ترکیب در دسترس هستند؟

BlendMode شامل مقادیر مانند NORMAL، MULTIPLY، SCREEN، OVERLAY و DARKEN و سایر موارد است — از طریق Layer.blend_mode_key تنظیم می‌شود.

آیا داده‌های ماسک لایه موجود هستند؟

Layer.layer_mask_data دارای یک getter کارا است، اما setter آن در این نسخه FOSS NotSupportedException را ایجاد می‌کند.

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

 فارسی