شما اینجا هستید

۱-۱ PIL -- کتابخانه تصویر پایتون

پیغام خطا

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls در book_prev() (خط 775 در /home/molavy/public_html/modules/book/book.module).

بستهPython Imaging Library)PIL) عملیات های عمومی برای کار روی تصویر مانند تغییر اندازه ، برش، چرخاندن، تغییر رنگ و بسیاری کارهای دیگر روی تصویر را در اختیار ما قرار میدهد. PIL رایگان است و به آسانی از آدرس

http://www.pythonware.com/products/pil/

در دسترس قرار دارد. با استفاده از PIL، شما می توانید تصاویر را از بسیاری فرمت ها بخوانید به بسیاری فرمت های عمومی بنویسید. مهمترین بخش آن ماژول Image است.برای خواندن یک تصویر از کدی شبیه زیر استفاده می کنیم.

from PIL import Image

pil_im = Image.open('empire.jpg')

مقدار برگشت داده شده pil_im یک شی تصویر PIL است.

تغییر رنگ ها با استفاده از تابع convert انجام می شود. برای خواندن یک تصویر و تبدیل آن به طیف سیاه و سفید، تنها کافیست از convert شبیه زیر استفاده می کنیم:

pil_im = Image.open('empire.jpg').convert('L')

در بالا ما از چند مثال که مستندات PIL انتخاب شده آمده اند. این مستندات در آدرس

www.pythonware.com/library/pil/handbook/index.htm

خروجی مثال ها در تصویر ۱-۱ نمایش داده شده است.

 

تصویر ۱-۱ مثال هایی از پردازش تصاویر با استفاده از PIL

 

تبدیل تصویر به فرمت های دیگر

با استفاده از تابع save می توانید به اغلب فرمت فایل های رایج تصاویر را ذخیره کنید. در اینجا یک مثال داریم که همه فایل های تصاویر را از لیست filelist میگیرد و آنها ب فرمت JPEG ذخیره می کند.

from PIL import Image

import os

for infile in filelist:

outfile = os.path.splitext(infile)[0] + ".jpg"

if infile != outfile:

try:

Image.open(infile).save(outfile)

except IOError:

print "cannot convert", infile 

تابع open در PIL یک شی تصویر در PIL می سازد و با استفاده از تابع save تصاویر را به نامی که به آن داده شده ذخیره می کند. دراینجا نام فایل جدید مثل فایل مبدا است با این تفاوت که به .jpg در انتهای آن همراه است. PIL آنقدر هوشمند هست که فرمت تصویر را با استفاده پسوند آن تشخیص دهد. همچنین ما یک قسمت از کد را برای بررسی این موضوع که یک فایل واقعا JPEG نبوده تشخیص دهد و خطایی در صفحه نمایش با پیغام عدم موفقیت در تبدیل را نشان میدهد.

در سراسر این کتاب ما نیاز به لیستی از تصاویر داریم تا روی آنها کار کنیم. شاید بهتر باشد یک لیست از نام فایل های تصاویری که درون یک پوشه ذخیره شده است ایجاد کنیم. یک فایل با نام imtools.py می سازیم تابع های عمومی پر استفاده را به آن اضافه می کنیم. در اینجا این تابع را اضافه کنید:

import os

def get_imlist(path):

""" Returns a list of filenames for all jpg images in a directory. """

return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')] 

حال به PIL برگردیم.

 

ایجاد تصاویر بندانگشتی

 

با استفاده از PIL ساخت تصاویر بند انگشتی بسیار ساده است. تابع thumbnail یک تاپل از سایز های جدید را می گیرد و تصویر را به اندازه هایی که در تاپل آمده تغییر اندازه می دهد. برای ایجاد تصویر بند انگشتی با حداکثر اندازه ۱۲۸ پیکسل از تابع زیر استفاده می کنیم:

pil_im.thumbnail((128,128)) 

کپی و چسباندن بخش ها

بریدن یک قسمت از تصویر با تابع crop انجام می شود:

 box = (100,100,400,400)

region = pil_im.crop(box) 

بخش در یک تاپل با چهار مقدار مشخص شده است که به ترتیب چپ و بالا و راست و پایین تصویر را مشخص می کند. PIL از سیستم مختصاتی استفاده می کند نقطه (0,0) در گوشه بالا و چپ قرار دارد. بخش استخراج شده برای مثال می تواند چرخانده شود و دوباره با تابع paste چسبانده شود.

region = region.transpose(Image.ROTATE_180)

pil_im.paste(region,box) 

 

تغییر اندازه و چرخاندن

برای تغییر اندازه تصویر تابع resize را با استفاده از یک تابع که حاوی اندازه جدید است فراخوانی می کنیم.

 out = pil_im.resize((128,128)) 

‌برای چرخاندن تصویر برخلاف عقربه های ساعت از تابع rotate استفاده می کنیم:

 out = pil_im.rotate(45) 

نتایج این چند مثال که در تصویر ۱-۱ آمده است. تصویر سمت چپ تصویر اصلی است و بعد از آن نسخه ای از تصویر با طیف سیاه وسفید آمده است، بعد از آن نسخه چسبانده شده از نسخه بریده و چرخانده شده آمده است و در انتها نسخه بند انگشتی تصویر آمده است.

دیدگاه‌ها

سلام خیلی عالیه آموزشتون فصل های دیگه کی اضافه میشه؟

دیدگاه جدیدی بگذارید