PIL

از Pythoni.ca

پرش به: ناوبری, جستجو
این نوشته (PIL) بخشی از کتاب عصر پایتون می باشد .
کتاب یک بایت از پایتون نکته ها و ترفند ها ماژول ها نمونه پروژه منابع آموزشینرم افزارهای جانبیکتابخانه‌های داخلی و خارجی پرسش و پاسخ

فهرست مندرجات

کتابخانه PIL : Python Image Library

PIL کتابخانه ایی قوی و پایه برای پردازش تصاویر با فرمت های متنوع هست که تحت دو لایسنس تجاری و آزاد منتشر شده است ، برای مثال در نسخه آزاد آن ماژول The ImageCrackCode موجود نیست .

در ادامه توابع این کتابخانه را مرورو می کنیم :

تابع open

import Image

im=Image.open("Image_Name")

برای خواندن تصویر از روی هارد دیسک .

مثال :


Py2.5:\> import Image
Py2.5:\> im=Image.open('c:/beach.jpg')

تابع save


im.save("Image_Name","Format")

برای ذخیره تصویر بروی هارد دیسک با فرمت های پشتیبانی شده . ( gif,jpeg,jpg,png,..)

مثال :


Py2.5:\> import Image
Py2.5:\> im=Image.open('c:/beach.jpg')
Py2.5:\> im.save('c:/beach.png')



تابع size

im.size



عرض و ارتفاع تصویر را در واحد پیکسل برمیگرداند. (بصورت tuple )

مثال :


Py2.5:\> import Image
Py2.5:\> im=Image.open('c:/beach.jpg')
Py2.5:\> im.size
(600, 451)



تابع format


im.format


فرمت فایل را برمی گرداند .

مثال :


Py2.5:\> import Image
Py2.5:\> im=Image.open('c:/beach.jpg')
Py2.5:\> im.format
'JPEG'



تابع mode


im.mode


مد عکس را برمیگرداند (RGB , CMYK , Luminance)

مثال :


Py2.5:\> import Image
Py2.5:\> im=Image.open('c:/beach.jpg')
Py2.5:\> im.mode
'RGB'



تابع show


im.show()


نمایش عکس با استفاده از نرم افزار پیش فرض ِ نمایش تصویردر سیستم عامل .

مثال :


Py2.5:\> import Image
Py2.5:\> im=Image.open('c:/beach.jpg')
Py2.5:\> im.show()



تابع thumbnail


im.thumbnail((x,y))


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


if x > size[0]: y = max(y * size[0] / x, 1); x = size[0]
if y > size[1]: x = max(x * size[1] / y, 1); y = size[1]
size = x, y


مثال :


Py2.5:\> import Image
Py2.5:\> im=Image.open('c:/beach.jpg')
Py2.5:\> im.size
(600, 451)
Py2.5:\> im.thumbnail((400,300))
Py2.5:\> im.size
(400, 300)
Py2.5:\> im.save('c:/beach_thumbnail.png','PNG')
Py2.5:\> im.show()


خروجی :


تصویر خروجی

تابع crop


 im.crop(box)


crop برای برداشتن بخشی از نصویر طبق مختصات داده شده در box استفاده می شود . box : یک tuple چهار عضوی ست که بصورت (left, upper, right, lower)box= تعریف میشود .

مثال :


Py2.5:\> import Image
Py2.5:\> im=Image.open('c:/beach.jpg')
Py2.5:\> im_crop = im.crop((150,200,420,270))
Py2.5:\> im_crop.save('c:/beanch_crop.png','PNG')
Py2.5:\> im_crop.show()


خروجی :

تصویر خروجی

تابع paste



im.paste(image , box=None , mask=None)


تصویر image را در مختصات box از تصویر im قرار میدهد . image و im میتوانن دو تصویر با مد متفاون باشند . سایز box میبایست با سایز image برابر باشد . paste باعث بسط سایز تصویر نمی شود . mask تصویر دیگری ست که بعنوان mask به کار میرود وبر حسب آن شفافیت (transparency) ، image را از سیاه مطلق (نشانه عدم نمایش ) تا سفید مطلق (نمایش کامل) تغییر می دهد .

مثال :



Py2.5:\> import Image
Py2.5:\> beach=Image.open('c:/beach.png')
Py2.5:\> butterfly=Image.open('c:/butterfly.png')
Py2.5:\> mask=Image.open('c:/mask.bmp')
Py2.5:\> box = (135,210,135+butterfly.size[0],210+butterfly.size[1])
Py2.5:\> box
(135, 210, 241, 290)
Py2.5:\> mask.size
(106, 80)
Py2.5:\> butterfly.size
(106, 80)
Py2.5:\> beach.paste(butterfly,box,mask)
Py2.5:\> beach.show()
Py2.5:\> beach.save('c:/butterfly_beach.jpeg','JPEG')


خروجی :

تصویر خروجی

تابع split



im.split()


تصویر را بر مبنای band های آن جدا می کند . برای مثال در صورتیکه مد تصویر CYMK باشد ، چهار تصویر بر مبنای هر یک از آنها در یک tuple برمیگرداند .

مثال :



Py2.5:\> import Image
Py2.5:\> beach_thumbnail=Image.open('c:/beach_thumbnail.png')
Py2.5:\> beach_thumbnail.mode
'RGB'
Py2.5:\> rgb=beach_thumbnail.split()

Py2.5:\> rgb
(<Image.Image instance at 0x00DFB288>, <Image.Image instance at 0x00E2C170>,<Image.Image instance at 0x00E2C198>)

Py2.5:\> rgb[0].save('c:/beach_thumbnail_r_split.png')
Py2.5:\> rgb[1].save('c:/beach_thumbnail_g_split.png')
Py2.5:\> rgb[2].save('c:/beach_thumbnail_b_split.png')


خروجی :

تصویر خروجی

تصویر خروجی

تصویر خروجی

تابع merge



merge(mode, bands)


مجموعه ایی از تصاویر با band های مجزا را بروی یک تصویر ادغام میکند .

مثال :



Py2.5:\> import Image
Py2.5:\> beach_thumbnail=Image.open('c:/beach_thumbnail.png')
Py2.5:\> bgr=beach_thumbnail.split()[2],beach_thumbnail.split()[1],beach_thumbnail.split()[0]
Py2.5:\> Image.merge("RGB",bgr).save('c:/beach_thumbnail_merge.png')
Py2.5:\> Image.merge("RGB",bgr).show()


خروجی :

تصویر خروجی

تابع transpose



im.transpose(method)


تحت method داده شده تصویر را جابه جا می کند . method می تواند شامل موارد زیر باشد :



Image.ROTATE_90
Image.ROTATE_180 
Image.ROTATE_270
Image.FLIP_LEFT_RIGHT 
Image.FLIP_TOP_BOTTOM


مثال :



Py2.5:\> beach_thumbnail.transpose(Image.FLIP_TOP_BOTTOM).save('c:/ beach_thumbnail_transpose.png')
Py2.5:\> beach_thumbnail.transpose(Image.FLIP_TOP_BOTTOM).show()


خروجی :

تصویر خروجی

تابع resize



im.resize(size, resample=0)


تصویری با سایز جدید ایجاد کرده و بر میگرداند . size از نوع tuple و شامل عرض و ارتفاع ست .

مثال :



Py2.5:\> import Image
Py2.5:\> beach=Image.open('c:/beach.png')
Py2.5:\> beach.resize((200,200)).save('c:/beach_resize.png')
Py2.5:\> beach.resize((200,200)).show()


خروجی :

تصویر خروجی

تابع rotate



im.rotate(angle, resample=0)


تصویر را در جهت عقربه های ساعت تحت زاویه angle می چرخاند و تصویر جدید را برمی گرداند.

مثال :




Py2.5:\> import Image
Py2.5:\> yoga=Image.open('c:/yoga.png')
Py2.5:\> yoga.rotate(180).save('c:/yoga_rotate.png')
Py2.5:\> yoga.rotate(180).show()


خروجی :

تصویر خروجی

تابع convert



convert(mode=None, data=None, dither=None, palette=0, colors=256)


برای تبدیل مد تصویر به کار می رود . مد می تواند شامل RGB , CMYK , L , P باشد .

مثال :



Py2.5:\> import Image
Py2.5:\> beach_thumbnail=Image.open('c:/beach_thumbnail.png')
Py2.5:\> beach_thumbnail.convert('1').save('c:/beach_thumbnail.convert.png')
Py2.5:\> beach_thumbnail.convert('1').show()


خروجی :

تصویر خروجی

تابع filter



import ImageFilter
im.filter(filter)


فیلتری را بروی تصویر اعمال میکند و تصویر حاصله را برمیگرداند . فیلتر میتواند شامل یکی از متغیر های زیر باشد :



ImageFilter.BLUR
ImageFilter.CONTOUR
ImageFilter.DETAIL
ImageFilter.EDGE_ENHANCE
ImageFilter.EDGE_ENHANCE_MORE
ImageFilter.EMBOSS
ImageFilter.FIND_EDGES
ImageFilter.MedianFilter
ImageFilter.SHARPEN
ImageFilter.SMOOTH
ImageFilter.SMOOTH_MORE



مثال :



horse=Image.open('c:/horse.png')

horse.filter(ImageFilter.BLUR).save('c:/horse_filter_blur.png')
horse.filter(ImageFilter.CONTOUR).save('c:/horse_filter_contour.png')
horse.filter(ImageFilter.DETAIL).save('c:/horse_filter_detail.png')
horse.filter(ImageFilter.EDGE_ENHANCE).save('c:/horse_filter_edge_enhance.png')
horse.filter(ImageFilter.EDGE_ENHANCE_MORE).save('c:/horse_filter_edge_enhance_more.png')
horse.filter(ImageFilter.EMBOSS).save('c:/horse_filter_emboss.png')
horse.filter(ImageFilter.FIND_EDGES).save('c:/horse_filter_find_edges.png')
horse.filter(ImageFilter.MedianFilter).save('c:/horse_filter_medianfilter.png')
horse.filter(ImageFilter.SHARPEN).save('c:/horse_filter_sharpen.png')
horse.filter(ImageFilter.SMOOTH).save('c:/horse_filter_smooth.png')
horse.filter(ImageFilter.SMOOTH_MORE).save('c:/horse_filter_smooth_more.png')


خروجی :

تصویر خروجی ImageFilter.BLUR

تصویر خروجی ImageFilter.CONTOUR

تصویر خروجی ImageFilter.EDGE_ENHANCE

تصویر خروجی ImageFilter.EDGE_ENHANCE_MORE

تصویر خروجی ImageFilter.EMBOSS

تصویر خروجی ImageFilter.FIND_EDGES

تصویر خروجی ImageFilter.MedianFilter