پردازش تصاویر با (Pil)Pillow در پایتون
یکی از کتابخانه های قدرتمند و محبوب پایتون برای کار با تصاویر، پردازش تصویریاب در Pillow(Pil) در کتابخانه پایتون است که به شما کمک می کند تا تصاویر را باز کنید، ویرایش کنید، ذخیره کنید و عملیات مختلفی بر روی آن ها انجام دهید.
رابط کاربری ساده و شهودی دارد و از فرمت های مختلف تصویر پشتیبانی می کند و امکان انجام عملیات پیچیده ای مانند تغییر اندازه، چرخش، فیلترگذاری و ترکیب تصاویر را فراهم می کند همچنین یک جامعه کاربری فعال و گسترده دارد که به شما در حل مشکلات و یادگیری بیشتر کمک خواهد کرد.
نصب Pillow
برای نصب Pillow، از ابزار مدیریت بسته pip
استفاده می کنیم. این ابزار به صورت پیش فرض در اکثر توزیع های پایتون نصب شده است.
در ترمینال یا (command) دستور زیر را اجرا کنید:
Bash
pip install Pillow
اگر از محیط مجازی استفاده می کنید ابتدا محیط مجازی خود را فعال کرده و سپس دستور بالا را اجرا کنید.
تأیید نصب
پس از اتمام نصب، می توانید با وارد کردن کد زیر در یک فایل پایتون و اجرای آن، نصب Pillow را تأیید کنید:
Python
from PIL import Image
print(Image.__version__)
اگر نصب به درستی انجام شده باشد، نسخه Pillow نصب شده بر روی سیستم شما نمایش داده می شود.
شروع کار با Pillow
پس از نصب موفق، می توانید با استفاده از کد های زیر شروع به کار با تصاویر کنید:
Python
from PIL importImage
# باز کردن یک تصویر
img = Image.open("my_image.jpg")
# نمایش اطلاعات تصویر
print(img.format) # فرمت تصویر
print(img.size) # ابعاد تصویر
print(img.mode) # حالت رنگ تصویر
# تغییر اندازه تصویر
new_size = (200, 150)
resized_img = img.resize(new_size)
# ذخیره تصویر جدیدresized_img.save("resized_image.jpg")
توصیه می شود همیشه سعی کنید از آخرین نسخه پایدار Pillow استفاده کنید تا از جدیدترین ویژگیها و بهبود های آن بهرهمند شوید و همچنین برای هر پروژه پایتون، یک محیط مجازی ایجاد کنید تا وابستگی های پروژه های مختلف با هم تداخل نداشته باشند.
برای خرید انواع لایسنس با کمترین قیمت، به سایت ما مراجعه کنید.
باز کردن و نمايش تصوير با pillow در پایتون
برای باز کردن یک تصویر، از تابع Image.open()
استفاده می کنیم. این تابع آدرس تصویر را به عنوان ورودی می گیرد و یک شیء از نوع Image را برمی گرداند.
Python
from PIL import Image
# باز کردن تصویر
img = Image.open('my_image.jpg')
برای نمایش تصویر، از تابع show()
استفاده می کنیم. این تابع تصویر را در یک پنجره جداگانه باز می کند.
Python
img.show()
مثال کامل
Python
from PIL import Image
# باز کردن تصویر
image_path = 'my_image.jpg' # مسیر تصویر را به دلخواه تغییر دهید
img = Image.open(image_path)
# نمایش تصویر
img.show()
برش تصاویر با تابع crop در پایتون و کتابخانه Pillow
تابع crop()
در کتابخانه Pillow یکی از ابزارهای قدرتمند برای برش و استخراج بخش خاصی از یک تصویر است. با استفاده از این تابع، شما می توانید یک ناحیه مشخص از تصویر را انتخاب کرده و آن را به عنوان یک تصویر جدید برش دهید.
نحوه استفاده از تابع crop()
برای استفاده از تابع crop()
، باید یک تاپل (tuple) چهار عضوی به عنوان ورودی به آن بدهید. این تاپل مختصات گوشه بالا سمت چپ و پایین سمت راست ناحیهای را که میخواهید برش دهید، مشخص می کند.
Python
from PIL importImage
# باز کردن تصویر
img = Image.open('my_image.jpg')
# برش تصویر
# (left, upper, right, lower)
cropped_img = img.crop((50, 50, 200, 200))
# نمایش تصویر برش خورده
cropped_img.show()
- left: مختصات x گوشه بالا سمت چپ ناحیه برش
- upper: مختصات y گوشه بالا سمت چپ ناحیه برش
- right: مختصات x گوشه پایین سمت راست ناحیه برش
- lower: مختصات y گوشه پایین سمت راست ناحیه برش
مثالهای بیشتر
- برش یک مربع از وسط تصویر:
Python width, height = img.size cropped_img = img.crop((width//2-50, height//2-50, width//2+50, height//2+50))
برش یک نوار افقی از تصویر:
Python cropped_img = img.crop((0, 100, img.size[0], 200))
توجه داشته باشید که مختصات پیکسل ها از گوشه بالا سمت چپ تصویر شروع می شود و مقادیر x از چپ به راست و مقادیر y از بالا به پایین افزایش می یابند.

تغییر اندازه تصاویر در پایتون با استفاده از کتابخانه Pillow
برای تغییر اندازه یک تصویر با استفاده از Pillow، از تابع resize()
استفاده می کنیم. این تابع یک تاپل (tuple) حاوی ابعاد جدید تصویر (عرض و ارتفاع) را به عنوان ورودی می گیرد.
Python
from PIL import Image
# باز کردن تصویر
img = Image.open("my_image.jpg")
# تغییر اندازه تصویر به 200 در 150 پیکسل
new_size = (200, 150)
resized_img = img.resize(new_size)
# ذخیره تصویر جدید
resized_img.save("resized_image.jpg")
حفظ نسبت ابعاد
اگر می خواهید هنگام تغییر اندازه، نسبت ابعاد تصویر حفظ شود، می توانید از فیلتر Image.ANTIALIAS
استفاده کنید. این فیلتر باعث می شود که تصویر تغییر اندازه شده کیفیت بهتری داشته باشد:
Python
resized_img = img.resize(new_size, Image.ANTIALIAS)
مثالهای بیشتر
- تغییر اندازه تصویر به نصف اندازه اصلی:
Python width, height = img.size new_size = (width // 2, height // 2) resized_img = img.resize(new_size)
- تغییر اندازه تصویر به یک اندازه مشخص و حفظ نسبت ابعاد:
Python max_size = 500 ratio = min(max_size/img.size[0], max_size/img.size[1]) new_size = tuple([int(x*ratio) forx inimg.size]) resized_img = img.resize(new_size, Image.ANTIALIAS)
چرخاندن تصویر در پایتون با pillow
کتابخانه Pillow تابعی به نام rotate()
دارد که به شما اجازه می دهد تا تصاویر را با زاویه دلخواه بچرخانید. برای چرخاندن یک تصویر، ابتدا باید آن را با استفاده از تابع Image.open()
باز کنید و سپس تابع rotate()
را روی آن اعمال کنید. زاویه چرخش را به عنوان آرگومان به این تابع می دهید.
Python
from PIL import Image
# باز کردن تصویر
img = Image.open('my_image.jpg')
# چرخاندن تصویر 90 درجه به راست
rotated_img = img.rotate(90)
# ذخیره تصویر چرخانده شده
rotated_img.save('rotated_image.jpg')
- زاویه مثبت: چرخش در خلاف جهت عقربه های ساعت
- زاویه منفی: چرخش در جهت عقربه های ساعت
- زاویه 90، 180، 270: چرخش های استاندارد
چرخاندن 45 درجه به چپ:
Python
rotated_img = img.rotate(-45)
چرخاندن 180 درجه:
Python
rotated_img = img.rotate(180)
اگر می خواهید هنگام چرخش، نسبت ابعاد تصویر حفظ شود، می توانید از آرگومان expand
استفاده کنید. این آرگومان به صورت پیشفرض برابر با True
است و باعث می شود که تصویر خروجی بزرگتر شود تا تمام پیکسل های اصلی حفظ شوند. اگر بخواهید تصویر خروجی همان اندازه تصویر اصلی باشد، می توانید این آرگومان را به False
تغییر دهید.
Python
# چرخاندن 45 درجه و حفظ نسبت ابعاد با پر کردن پسزمینه با رنگ سفید
rotated_img = img.rotate(45, expand=True, fillcolor=(255, 255, 255))
توجه داشته باشید که زاویه چرخش بر حسب درجه است و اگر تصویر چرخانده شده بزرگتر از تصویر اصلی شود، قسمت های خالی با رنگ مشخص شده در fillcolor
پر می شود.
انواع لایسنس تبلو tableau و لایسنس پاور بی آی با ارزان ترین قیمت توسط آن لایسنس ارائه می شود.
ذخیره تصاویر با Pillow در پایتون
پس از انجام عملیات مختلف بر روی تصاویر با استفاده از کتابخانه Pillow، معمولاً نیاز به ذخیره تصویر نهایی داریم. تابع save()
در Pillow این امکان را به ما می دهد.
نحوه استفاده از تابع save()
Python
from PIL import Image
# باز کردن تصویر
img = Image.open("my_image.jpg")
# انجام عملیات بر روی تصویر (مثلاً چرخش)
rotated_img = img.rotate(90)
# ذخیره تصویر با فرمت جدید (مثلاً PNG)
rotated_img.save("rotated_image.png")
توجه:
- آرگومان اول: نام فایل مقصد که تصویر در آن ذخیره می شود.
- فرمت فایل: فرمت فایل خروجی به طور خودکار از پسوند فایل تعیین می شود. اگر پسوندی مشخص نکنید، فرمت فایل ورودی به عنوان فرمت خروجی در نظر گرفته می شود.
کنترل کیفیت تصویر (برای فرمت JPEG)
برای کنترل کیفیت تصاویر JPEG، می توانید از آرگومان quality
استفاده کنید. این آرگومان یک عدد صحیح بین 1 تا 95 است که کیفیت تصویر را مشخص می کند. عدد بالاتر نشاندهنده کیفیت بالاتر و حجم فایل بزرگتر است.
Python
rotated_img.save("rotated_image.jpg", quality=95)
ذخیره تصویر با کیفیت پایین (برای کاهش حجم فایل):
Python
rotated_img.save("rotated_image.jpg", quality=50)

ذخیره تصاویر در فرمتهای مختلف با پایتون و Pillow
Pillow از طیف گستردهای از فرمت های تصویری پشتیبانی می کند، از جمله:
- JPEG (JPG): فرمت فشرده سازی با کیفیت بالا که برای تصاویر عکاسی بسیار مناسب است.
- PNG: فرمت بدون فشرده سازی یا فشرده سازی بدون از دست دادن اطلاعات که برای تصاویر با پسزمینه شفاف و گرافیک های وکتور مناسب است.
- GIF: فرمت برای تصاویر متحرک و تصاویر با تعداد رنگ محدود.
- BMP: فرمت ساده و بدون فشرده سازی که توسط ویندوز استفاده می شود.
- TIFF: فرمت با کیفیت بالا که برای تصاویر پزشکی و علمی استفاده می شود.
- WebP: فرمت جدید گوگل که فشرده سازی بهتری نسبت به JPEG ارائه می دهد.
- و بسیاری دیگر…
نحوه ذخیره تصویر در فرمت دلخواه با Pillow
برای ذخیره یک تصویر در فرمت دلخواه، از متد save()
استفاده می کنیم. این متد یک آرگومان اجباری به نام format
می گیرد که فرمت مورد نظر را مشخص می کند.
Python
from PIL import Image
# باز کردن تصویر
img = Image.open("image.jpg")
# ذخیره تصویر در فرمت PNG
img.save("image.png")
# ذخیره تصویر در فرمت JPEG با کیفیت 80
img.save("image.jpg", quality=80)
# ذخیره تصویر در فرمت WebP
img.save("image.webp")
نکات مهم :
- کیفیت تصویر: اگر به کیفیت بسیار بالا نیاز دارید، فرمت هایی مانند PNG یا TIFF را انتخاب کنید. اگر حجم فایل برای شما مهم است، می توانید از فرمت های فشرده سازی مانند JPEG یا WebP استفاده کنید.
- شفافیت: اگر تصویر شما دارای پس زمینه شفاف است، از فرمت هایی مانند PNG یا GIF استفاده کنید.
- انیمیشن: اگر می خواهید یک تصویر متحرک ایجاد کنید، از فرمت GIF استفاده کنید.
- پشتیبانی نرمافزار: اطمینان حاصل کنید که نرم افزاری که می خواهید تصویر را با آن باز کنید، از فرمت انتخابی پشتیبانی می کند.
مثال کامل: تبدیل چندین تصویر به فرمت WebP
Python
import os
fromPIL importImage
# مسیر پوشه حاوی تصاویر
image_folder = "images"
# فرمت خروجی
output_format = "webp"
# تبدیل همه تصاویر در پوشه
forfilename inos.listdir(image_folder):
iffilename.endswith(".jpg") orfilename.endswith(".png"):
img = Image.open(os.path.join(image_folder, filename))
img.save(os.path.join(image_folder, f"{filename[:-4]}.{output_format}"))
در این مثال، همه تصاویر با پسوند JPG یا PNG در پوشه images
به فرمت WebP تبدیل می شوند.
لایسنس Enterprise security (ES) از شرکت معتبر آن لایسنس خریداری کنید.
پیدا کردن اندازه تصویر در پایتون با Pillow
برای پیدا کردن اندازه یک تصویر با پردازش تصویریاب در Pillow(Pil) در کتابخانه پایتون، می توانید از روش زیر استفاده کنید:
Python
from PIL import Image
# باز کردن تصویر
img = Image.open("image.jpg") # جایگزین "image.jpg" با مسیر تصویر خود کنید
# گرفتن اندازه تصویر
width, height = img.size
print("عرض تصویر:", width)
print("ارتفاع تصویر:", height)
در این مثال با متد size
یک تاپل (tuple) شامل عرض و ارتفاع تصویر را برمی گرداند. این تاپل را در دو متغیر width
و height
ذخیره می کنیم و با استفاده از دستور print
، عرض و ارتفاع تصویر را نمایش می دهیم.
مثال کاملتر با تغییر اندازه تصویر:
Python
from PIL importImage
# باز کردن تصویر
img = Image.open("image.jpg")
# گرفتن اندازه تصویر اولیه
original_width, original_height = img.size
print("اندازه اصلی تصویر:", original_width, original_height)
# تغییر اندازه تصویر (مثلاً به نصف اندازه اصلی)
new_size = (original_width // 2, original_height // 2)
resized_img = img.resize(new_size)
# ذخیره تصویر جدید
resized_img.save("resized_image.jpg")
# گرفتن اندازه تصویر جدید
new_width, new_height = resized_img.size
print("اندازه تصویر جدید:", new_width, new_height)

چسباندن یک عکس روی عکس دیگر با پایتون و Pillow
یکی از این امکانات کتابخانه Pillow، چسباندن یک تصویر روی تصویر دیگر است. که مراحل آن به ترتیب زیر است :
- وارد کردن کتابخانهها: کتابخانه های لازم، از جمله Pillow، را وارد می کنیم.
- باز کردن تصاویر: تصاویر مورد نظر را با استفاده از متد
open()
باز می کنیم. - ایجاد یک تصویر جدید: یک تصویر جدید با اندازه مناسب برای قرار دادن هر دو تصویر ایجاد می کنیم.
- چسباندن تصاویر: با استفاده از متد
paste()
، تصویر دوم را روی تصویر اول در موقعیت دلخواه می چسبانیم. - ذخیره تصویر جدید: تصویر ترکیبی را با فرمت دلخواه ذخیره می کنیم.
مثال عملی
Python
from PIL import Image
# باز کردن دو تصویر
image1 = Image.open("image1.jpg")
image2 = Image.open("image2.png")
# ایجاد یک تصویر جدید با اندازه کافی بزرگ
new_image = Image.new('RGB', (image1.width + image2.width, max(image1.height, image2.height)))
# چسباندن تصویر دوم در کنار تصویر اول
new_image.paste(image1, (0, 0))
new_image.paste(image2, (image1.width, 0))
# ذخیره تصویر جدید
new_image.save("combined_image.jpg")
توضیح کد:
- دو تصویر
image1.jpg
وimage2.png
را باز می کنیم. - یک تصویر جدید با عرض برابر با مجموع عرض دو تصویر و ارتفاع برابر با حداکثر ارتفاع دو تصویر ایجاد می کنیم. این کار تضمین می کند که هر دو تصویر به طور کامل در تصویر جدید قرار می گیرند.
- تصویر اول را در مختصات (0, 0) (گوشه بالا سمت چپ) تصویر جدید می چسبانیم.
- تصویر دوم را در مختصات (image1.width, 0) (بلافاصله بعد از تصویر اول در ردیف بالا) می چسبانیم.
- تصویر ترکیبی را با نام
combined_image.jpg
ذخیره می کنیم.
افزودن متن به تصویر با پایتون و Pillow
از دیگر کاربرد های بی نظیر این کتابخانه قدرتمند، افزودن متن به تصاویر است. که مراحل آن به شرح زیر است :
- وارد کردن کتابخانهها: کتابخانههای لازم، از جمله Pillow و Font، را وارد می کنیم.
- باز کردن تصویر: تصویر مورد نظر را با استفاده از متد
open()
باز می کنیم. - ایجاد یک شیء Draw: یک شیء از کلاس
ImageDraw.Draw
ایجاد می کنیم تا بتوانیم روی تصویر رسم کنیم. - انتخاب فونت: فونت مورد نظر را انتخاب کرده و اندازه آن را مشخص می کنیم.
- نوشتن متن: از متد
text()
برای نوشتن متن در موقعیت مشخصی از تصویر استفاده می کنیم. - ذخیره تصویر جدید: تصویر با متن اضافه شده را با فرمت دلخواه ذخیره می کنیم.
مثال عملی
Python
from PIL import Image, ImageDraw, ImageFont
# باز کردن تصویر
img = Image.open("image.jpg")
# ایجاد یک شیء Draw
draw = ImageDraw.Draw(img)
# انتخاب فونت
font = ImageFont.truetype("arial.ttf", 36)
# نوشتن متن
text = "سلام، این یک متن است"
draw.text((100, 100), text, font=font, fill=(255, 0, 0)) # متن قرمز رنگ در موقعیت (100, 100)
# ذخیره تصویر جدید
img.save("image_with_text.jpg")
توضیحات مثال بالا:
- تصویر
image.jpg
را باز می کنیم. - یک شیء از کلاس
ImageDraw.Draw
ایجاد می کنیم که به ما اجازه می دهد روی تصویر رسم کنیم. - فونت
arial.ttf
را با اندازه 36 انتخاب می کنیم. - متن “سلام، این یک متن است” را در موقعیت (100, 100) می نویسیم.
fill=(255, 0, 0)
رنگ متن را به قرمز تنظیم می کند.- تصویر با متن اضافه شده را با نام
image_with_text.jpg
ذخیره می کنیم.
شما می توانید فونت های مختلفی را با استفاده از ImageFont.truetype()
انتخاب کنید و با تغییر پارامتر اندازه در ImageFont.truetype()
، اندازه فونت را تغییر دهید. اگر نیاز به تراز بندی متن داشتید پیشنهاد می کنیم که از پارامترهای anchor
و align
استفاده کنید.
مثال پیشرفتهتر: افزودن چندین متن با سبکهای مختلف
Python
# ... (کد قبلی)
# نوشتن متن دوم با سبک متفاوت
draw.text((200, 200), "این متن بولد است", font=font.font_variant('bold'), fill=(0, 0, 255))
# ذخیره تصویر جدید
img.save("image_with_multiple_texts.jpg")
همانطور که گفته شد pillow یک کتابخانه قدرتمند است که به پردازش تصویر می پردازد. ما سعی کردیم در این مقاله به معرفی کامل این کتابخانه و انواع کاربرد آن بپردازیم و به شما در استفاده از آن کمک کرده باشیم. علاوه بر Pillow، کتابخانه های دیگری مانند OpenCV نیز برای پردازش تصویر در پایتون استفاده می شوند. OpenCV کتابخانه ای قدرتمندتر است و امکانات بیشتری را برای پردازش تصویر فراهم میکند. امیدوارم این اطلاعات برایتان مفید بوده باشد.
بیشتر بخوانید :
بدون دیدگاه