بکندباز

چگونه با استفاده از PIL یک تصویر PNG با بک گراند شفاف را با یک تصویر دیگر ادغام کنیم؟

در این مقاله نحوه قرار دادن یک تصویر PNG شفاف روی یک تصویر دیگر آموزش داده می شود. این یک عملیات بسیار رایج بر روی تصاویر است و کاربردهای بسیار متفاوتی دارد. به عنوان مثال، اضافه کردن یک واترمارک یا لوگو بر روی یک تصویر. برای این کار از ماژول PIL در پایتون استفاده می کنیم. که در آن از چند متد داخلی استفاده می کنیم و تصاویر را طوری ترکیب می کنیم که به نظر چسبانده می شود.

  • تابع open – برای باز کردن یک تصویر استفاده می شود.
  • تابع convert – یک کپی تبدیل شده از یک تصویر داده شده را برمی گرداند. با ماسک شفافیت تصویر را به رنگ واقعی خود تبدیل می کند.
  • تابع paste – برای چسباندن یک تصویر روی تصویر دیگر استفاده می شود.

سینتکس متد paste:

PIL.Image.Image.paste(image_1, image_2, box=None, mask=None) 
یا
image_object.paste(image_2, box=None, mask=None)

پارامتر ها:

  • image_1/image_object : تصویری است که قرار است تصویر دیگری روی آن چسبانده شود.
  • image_2: تصویر منبع یا مقدار پیکسل (int یا tuple).
  • box: یک تاپل 4 تایی اختیاری که مختصات منطقه مورد نظر برای چسباندن را مشخص می کند. اگر به جای آن از تاپل 2 تایی استفاده شود، به عنوان فاصله از گوشه سمت چپ بالا در نظر گرفته می شود. در صورت حذف یا None، منبع در گوشه سمت چپ بالا چسبانده می شود.
  • mask: ماسکی که برای چسباندن تصویر استفاده می شود. اگر تصویری را با شفافیت ارسال کنید، از کانال آلفا به عنوان ماسک استفاده می شود.

روش حل:

  • با استفاده از تابع Image.open()‎ تصویر رویی و پس زمینه را باز کنید.
  • هر دو تصویر را به RGBA تبدیل کنید.
  • موقعیتی را که می خواهید تصویر را در آن جایگذاری کنید محاسبه کنید.
  • از تابع paste برای ادغام دو تصویر استفاده کنید.
  • تصویر را ذخیره کنید.

داده های ورودی:

برای وارد کردن داده ها از دو تصویر استفاده می کنیم:

  • تصویر رویی: یک تصویر شفاف مانند یک لوگو

  • تصویر پس زمینه: برای پس زمینه مانند هر تصویر پس زمینه

پیاده سازی:

# import PIL module
from PIL import Image

# تصویر شفاف رویی
filename = 'front.png'

# تصویر زمینه
filename1 = 'back.jpg'

# باز کردن تصویر رویی
frontImage = Image.open(filename)

# باز کردن تصویر زمینه
background = Image.open(filename1)

# تبدیل تصویر به RGBA
frontImage = frontImage.convert("RGBA")

# تبدیل تصویر به RGBA
background = background.convert("RGBA")

# محاسبه اختلاف طول دو تصویر، تا تصویر در وسط قرار بگیرد
width = (background.width - frontImage.width) // 2

# محاسبه اختلاف ارتفاع دو تصویر، تا تصویر در وسط قرار بگیرد
height = (background.height - frontImage.height) // 2

# قرار دادن تصویر در مختصات به دست آمده (width, height)
background.paste(frontImage, (width, height), frontImage)

# ذخیره تصویر جدید با فرمت png
background.save("new.png", format="png")

خروجی:

zohreh

مدیر وب سایت بکندباز

دیدگاه‌ها

*
*