در این نوشته، آموزش Tkinter را رها می کنیم تا کمی درباره ماژول Pillow بگوییم که برای خواندن، نوشتن و کار با فایل های فرمت تصویری مانند png, gif یا jpeg به کار می رود. ماژول Pillow در دسته ماژول هایی است که برای پردازش تصویر به کار می روند. یکی از برجسته ترین ماژول های پردازش تصویر در پایتون Python OpenCV است که در نوشته هایی جداگانه آموزش داده شده است. نصب آن بسیار ساده و تنها باید دستور pip install pillow را انجام دهید.

کار با تصویرها و پردازش آنها در پی اچ پی

خواندن فایل و نمایش ویژگی های تصویر با Pillow

ماژول Pillow دارای کلاسی به نام Image و این کلاس دارای متدی به نام ()open است که نام یا مسیر یک فایل را دریافت و سپس آن را می خواند. در کد زیر در آغاز کلاس Image به کمک دستور from PIL import Image به برنامه پیوست شده است. سپس به کمک متد ()Image.open فایل با فرمت png خوانده شده و سپس یک نمونه از یک کلاس به نام PngImageFile برگشت داده شده است که همان متغیر image است. هر زمان که فایل تصویری با هر فرمتی که بخوانید، می توانید به سه ویژگی format و size و mode دسترسی داشته باشید.

ویژگی format فرمت فایل خوانده شده را نشان می دهد که در دستور و خروجی زیر، فرمت PNG خواهد بود. ویژگی size یک تاپل از دو شماره است که شماره یکم با اندیس صفر در تاپل، همان عرض و شماره دوم با اندیس یک در تاپل، همان ارتفاع تصویر هستند. ویژگی mode در واقع گونه تصویر را نشان می دهد. این ویژگی دارای یک سری مقدارهای ثابت مانند RGBA برای تصویرهای رنگی سه کانالی، Luminance برای تصویر تک کانالی یا همان تصویرهای خاکستری (Grayscale) است.

کد زیر (دومین کد) باز نویسی شده کد شماره یک است که در آنها یک لیست از مسیر تصویرها داریم. در بند ۱۲ و در یک حلقه for و تا زمانی که همه مسیرهای درون لیست خوانده شوند، در بند ۱۳ و به کمک متد ()exists از ماژول os.path بررسی می کنیم که آیا واقعا مسیر کنونی در دیسک سیستم هست یا نه؟ اگر نباشد خطای بند ۱۸ نشان داده می شود ولی اگر باشد، دومین if انجام می شود که به کمک متد ()isfile از ماژول os.path بررسی می کند که مسیر کنونی، واقعا یک فایل است، اگر نباشد (یک دایرکتوری است)، پس خطای بند ۲۰ نشان داده می شود ولی اگر فایل باشد، پس فایل به کمک متد ()open از کلاس Image خوانده می شود و سپس ویژگی های آن نمایش داده خواهند شد. شکل زیر خروجی را نشان می دهد.

کد زیر (سومین کد) باز نویسی شده کد بالا است به گونه که اگر مسیری از لیست فایلی بر روی دیسک نبود و یا اینکه یک دایرکتوری بود، دیگر نمی خواهیم خطایی نمایش دهیم، بلکه با داشتن دو لیست به نام not_file و not_found و به کمک متد ()append از لیست ها، مسیرهای پیدا نشده یا مسیرهای دایرکتوری را به لیست های جدا بریزیم. کد زیر همان دومین بالا است ولی در بندهای ۲۲ و ۲۴ بررسی می شود که اگر مقدار ویژگی mode به ترتیب برابر با P یا L بود، این دو مقدار خواناتر شده و به جای آنها مقدارهای Palettised و Luminance نشان داده شوند.