چگونه با لایههای 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 را ایجاد میکند.