python در حال حاضر یکی از پرکاربردترین زبان های برنامه نویسی در جهان است. می توان از آن برای انجام وظایف مختلف با استفاده از یک کد ساده استفاده کرد. یکی از این کارها پردازش تصویر در پایتون است.
یکی از کارهای مهمی که پایتون می تواند انجام دهد پردازش خودکار تصاویر دیجیتال است که می تواند با استفاده از Pillow انجام شود.
در این مقاله، نحوه پردازش تصویر در پایتون با استفاده از ماژول Pillow را به شما نشان خواهیم داد. سپس، آن را یک گام جلوتر خواهیم برد و نحوه اجرای برخی از عملیات اساسی برای تصویر را نشان خواهیم داد.
پیش نیاز این آموزش، دانش اولیه ای از پایتون و مفسر پایتون 3 است که باید آن را روی سیستم خود نصب کرده باشید.
چنانچه به پایتون تسلط ندارید کافیست مجموعه دوره های آموزشی پایتون را مطالعه بفرمایید.
Pillow زیر مجموعه ای از کتابخانه های پردازش تصویر در پایتون به نام PIL است. این کتابخانه رایگان و منبع باز است و برای دستکاری و پردازش تصاویر به کار میرود.
PIL به خودی خود یک کتابخانه قدرتمند است، اما از سال 2009 به روز نشده است و از پایتون 3 پشتیبانی نمی کند. Pillow ویژگی ها و پشتیبانی بیشتری را برای Python 3 ارائه می دهد.
Pillow از طیف وسیعی از فرمتهای تصویر مانند PNG، JPEG، PPM، GIF، TIFF و BMP پشتیبانی میکند. با استفاده از این کتابخانه میتوانید عملیاتهای مختلفی مانند برش، تغییر اندازه، افزودن متن، چرخش، تغییر رنگ و موارد دیگر را بر روی تصاویر انجام دهید.
میتوانید Pillow را با استفاده از pip، که یک ابزار مدیریت پکیج برای پایتون است، نصب کنید:
python3 -m pip install --upgrade pip python3 -m pip install --upgrade Pillow
Pillow آبجکت Image را ارائه می کند که دارای توابع و ویژگی های داخلی است که می توان با استفاده از آن ها عملیات دستکاری را بر روی تصاویر انجام داد.
برای شروع، ابتدا شی Image را در کد پایتون import یا وارد کنید.
from PIL import Image
سپس، تصویر را با فراخوانی تابع
آپلود یا بارگذاری کنید، که نوع بازگشتی آن مقداری از نوع شی Image است.Image.open()
image = Image.open('sample.jpg')
برای برنامه خود، از یک تصویر نمونه از Unsplash استفاده می کنیم.
همچنین گفتن این نکته ضروری است که تصاویر باید در همان دایرکتوری باشند که فایل پایتون در حال اجرا است.
تصویر ویژگی هایی دارد که می توانیم برای دریافت اطلاعات بیشتر از تصویر به آنها دسترسی داشته باشیم. از جمله:
ما همچنین میتوانیم تصاویر خود را با استفاده از عملیات های مختلف پردازش و دستکاری هستیم.
هر تغییری که در شی Image ایجاد شود را می توان با متد save()
در یک فایل تصویری ذخیره کرد. تمام چرخش ها، تغییر اندازه، برش، ترسیم و سایر دستکاری های تصویر از طریق فراخوانی روی این شی Image انجام می شود.
بیایید عمیق تر شویم و برخی از این عملیات را با جزئیات بیشتر بررسی کنیم.
Pillow از طیف گسترده ای از فرمت های تصاویر پشتیبانی می کند. یک تصویر را می توان از یک فرمت به فرمت دیگر به صورت زیر تبدیل کرد:
image = Image.open('sample.jpg') image.save('sample_formatted.png')
ابتدا تصویر بارگذاری می شود. سپس Pillow پسوند فایل مشخص شده را به صورت PNG در نظر میگیرد، یعنی تصویر را قبل از ذخیره در فایل به PNG. تبدیل می کند.
image = Image.open('sample.jpg') image.thumbnail((200, 200)) image.save('sample_thumbnail.jpg')
با ایجاد یک thumbnail یا تصویر بند انگشتی از تصویر با استفاده از Pillow می توانید اندازه تصاویر را تغییر دهید.
با استفاده از تابع thumbnail اندازه تصویر تغییر می کند تا نسبت ابعاد آن حفظ شود. این تابع دو مقدار می گیرد که نشان دهنده حداکثر عرض و حداکثر ارتفاع تصویر کوچک است.
image = Image.open('sample.jpg') image.thumbnail((200, 200)) image.save('sample_thumbnail.jpg')
اگر نیاز دارید تصویر برگردانده شود یا بچرخد، Pillow به شما امکان میدهد این کار را بکنید. این کار با استفاده از تابع transpose انجام می شود که پارامترهای زیر را می گیرد:
image = Image.open('sample.jpg') image.transpose(Image.FLIP_TOP_BOTTOM) image.save('sample_flip.jpg')
همچنین می توانید تصاویر را با استفاده از متد rotate() بچرخانید. این تابع یک آرگومان صحیح یا اعشاری می گیرد که نشان دهنده درجه چرخش است و یک شی Image جدید از تصویر چرخانده شده را برمی گرداند. چرخش در خلاف جهت عقربه های ساعت است.
image = Image.open('sample.jpg') image.rotate(90) image.save('image_rotate90.jpg')
برش یک تصویر به معنای برش دادن تنها یک بخش خاص از آن است که این کار اغلب هنگام ویرایش تصاویر برای برنامه های وب به کار می رود.
تابع crop در Pillow تصویر را به صورت مستطیلی برش میدهد. این متد یک تاپل را می گیرد که موقعیت و اندازه ناحیه برش خورده را مشخص می کند و یک شی Image که تصویر برش خورده را نشان می دهد برمی گرداند. ناحیهی برش با یک 4 تایی تعریف می شود که مختصات آن (چپ، بالا، راست، پایین) است.
image = Image.open('sample.jpg') image.crop(200, 50, 450, 300) image.save('sample_cropped.jpg')
در مثال بالا، دو مقدار اول مکان شروع برای برش را از سمت چپ بالا نشان می دهند. مقادیر سوم و چهارم نشان دهنده فاصله به پیکسل از موقعیت شروع به سمت راست و پایین است.
اندازه کامل تصویر برش داده شده را می توان 250×250 پیکسل محاسبه کرد.
اشکال مختلفی از نمایش پیکسل ها از جمله L (درخشندگی)، RGB و CMYK وجود دارد.
Pillow به شما امکان می دهد با استفاده از متد convert تصاویر را برای نمایش های مختلف به مقدار پیکسلی تبدیل کنید. این کتابخانه از تبدیل بین هر حالت پشتیبانی شده و همچنین از حالت های "L" و "RGB" پشتیبانی می کند. برای تبدیل بین حالت های دیگر، ممکن است مجبور باشید از یک تصویر "RGB" استفاده کنید.
image = Image.open('sample.jpg') grayscale_image = image.convert('L') grayscale_image.save('sample_grayscale.jpg')
با استفاده از تابع convert، تصویر نمونه از حالت RGB به حالت L (درخشندگی) تبدیل می شود که منجر به ساخت یک تصویر در مقیاس خاکستری می شود.
عمل ویرایش و بهبود تصاویر برای بهبود ظاهر آن را می توان فیلتر کردن نامید.
با استفاده از ماژول ImageFilter از Pillow، می توانید از متد filter استفاده و از تکنیک های مختلف فیلتر استفاده کنید، از جمله:
برای مثال، اجازه دهید نگاهی به فیلتر FIND_EDGES بیندازیم:
from PIL import Image, ImageFilter image = Image.open('sample.jpg') edges_image = image.filter(ImageFilter.FIND_EDGES) edges_image.save('sample_edges.jpg')
هر تصویری را می توان با استفاده از هر یک از فیلترهای موجود برای تولید خروجی مورد نظر پردازش کرد.
اکنون که درک اولیه ای از کتابخانه داریم، اجازه دهید یک فتایل پایتون ساده برای خودکارسازی پردازش انواع مختلف تصاویر ایجاد کنیم.
فرض کنید به شما گروهی از تصاویر داده شده است و از شما خواسته می شود که به هر تصویر یک واترمارک اضافه کنید.
برای حل مشکل، می توانید یک فایل پایتون به نام script.py در همان پوشه ای که تصاویر وجود دارد ایجاد کنید.
ابتدا تمام ماژول های لازم را وارد کنید:
import os from PIL import Image
ماژول os در پایتون توابعی را برای ایجاد و حذف دایرکتوری و تغییر و شناسایی دایرکتوری فعلی ارائه می دهد.
یک دایرکتوری برای تصویر پردازش شده ایجاد کنید:
os.makedirs('watermarked_images')
طول و عرض تصویر لوگو را ذخیره کنید:
logo_image = Image.open('watermark_logo.png') logo_image = logo_image.resize((50, 50)) logo_width, logo_height = logo_image.size
از تابع os.listdir همراه با یک حلقه for استفاده کنید:
for image in os.listdir('./images'): try: # Separting the filepath from the image's name path, filename = os.path.split(image) filename = os.path.splitext(filename)[0] Open the image: image = Image.open('./images/'+image) #Resizing the image to a set size. edited_image = image.resize((300, 300)) #Setting the position for the placement width = edited_image.width height = edited_image.height
برای قرار دادن لوگو روی تصویر از تابع paste استفاده کنید:
edited_image.paste(logo_image, (width - logo_width, height - logo_height), logo_image)
تصاویر را در دایرکتوری جدید ذخیره کنید:
edited_image.save('./watermarked_Images/' + filename + ".jpg")
هر تصویر در دایرکتوری پردازش شده و واترمارک به آن اضافه میشود. این کد ما را قادر می سازد تا کار را در زمان کمتری به بهترین شکل انجام دهیم.
همچنین میتوانید GitHub را برای کد کامل و منابع مرتبط با این آموزش بررسی کنید.
Pillow یک کتابخانه قدرتمند برای پردازش تصاویر در پایتون است. در این آموزش، ما یک درک اساسی از نحوه انجام عملیات اساسی روی تصاویر در پایتون با استفاده از Pillow ایجاد کردیم.
اگر می خواهید بیشتر بدانید، اسناد رسمی Pillow را بررسی کنید.
منبع: وبسایت لاگراکت
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.