עבודה עם תמונות בפייתון

מחבר:
בתאריך:

אחת המשימות הנפוצות ביותר בתכנות פייתון היא עבודה עם תמונות. במדריך זה הסבר על ספרית Pillow שהופכת את העבודה עם תמונות ובכלל כך פתיחה, עריכה ושימוש בפילטרים לפשוטה מאוד.

עבודה עם תמונות בפייתון pillow

הספרייה מכונה גם PIL ראשי תיבות של Python Imaging Library.

 

התקנת הספרייה

PIL לא מובנה בתוך פייתון. לכן אנחנו צריכים להתקין אותה באמצעות pip. הריצו את הפקודה הבאה בשורת הפקודות כדי להתקין את הספרייה:

pip install Pillow

 

סביבת העבודה

הקוד להלן ייבא את הספריות שישמשו אותנו במדריך:

import os
from PIL import Image
  • המודול os מאפשר לנו לעבוד עם קבצים.
  • המודול Image של ספריית PIL ישמש אותנו למניפולציה של התמונות.

את התמונות ריכזתי בתוך תיקייה ששמה images. בתוך התיקייה שלוש תמונות:

directory structure for the pillow tutorial

  • carousel.jpg
  • pandas.jpg
  • whale.jpg

 

פתיחה של תמונות

כדי לעבוד עם תמונה קיימת צריך לפתוח אותה, ולשם כך נשתמש בפקודה open:

img = Image.open('images/pandas.jpg')
  • אנחנו מעבירים לפקודה open את נתיב התמונה שאנחנו מעוניינים לפתוח.
  • המודול פותח את התמונה ויוצר אובייקט שאותו אנחנו מציבים לתוך המשתנה img איתו נעבוד בהמשך המדריך.

 

הצגה של תמונה

כדי להציג תמונה נשתמש בשתי שורות הקוד הבאות:

img = Image.open('images/pandas.jpg')
img.show()

במחשב שלי, הפקודה פתחה את התמונה באמצעות תוכנת Microsoft office:

פתיחה של תמונה באמצעות חבילת pillow של פייתון

 

שינוי סוג הקובץ

הפקודה save מאפשרת לנו לבחור את פורמט הקובץ שלתוכו נשמור את התמונה. נפתח קובץ jpg ונשמור אותו כ-png:

img = Image.open('images/pandas.jpg')
img.save('images/pandas.png')

כשנפתח את התיקייה images נגלה שנוסף לתמונת pandas.jpg המקורית, PIL יצר תמונה נוספת שגם שמה pandas עם ההרחבה png.

pillow saved the image in a new format (png) instead of jpg

 

ממדי התמונה

התכונה size מאפשרת לנו לברר את ממדי התמונה (רוחב וגובה):

img = Image.open('images/pandas.jpg')
width, height = img.size
print(width)
print(height)

 

שינוי גודל התמונה

כדי לשנות את גודל התמונה צריך לספק tuple עם הממדים המקסימליים ולהשתמש בפקודה thumbnail:

# define the maximum size for resizing
small = (300,300)


# resize
img_name = 'pandas.jpg'
img = Image.open('images/{}'.format(img_name))
img.thumbnail(small)
img.save('images_small/{}'.format(img_name))
  • הפקודה thumbnail מגבילה את גודל התמונה ל-300 פיסקלים.
  • הפקודה save שומרת את התמונה לתוך התיקייה images_small.

 

שינוי גודל התמונה כשעובדים עם מספר קבצים

שינוי גודל התמונה הוא שימושי במיוחד באתרי אינטרנט כשאנחנו רוצים להתאים את הגודל של כל התמונות בתיקייה. לשם כך, נריץ את הקוד מהסעיף הקודם בתוך לולאה שעוברת על כל הקבצים בתיקייה:

# define the maximum size for resizing
small = (300,300)


# iterate over all the files in the 'images' folder
for f in os.listdir('images'):
  if f.endswith('.jpg') or f.endswith('.png'):
    # resize
    img_name = f
    img = Image.open('images/{}'.format(img_name))
    img.thumbnail(small)
    img.save('images_small/{}'.format(img_name))
  • הפונקציה os.listdir מאפשרת לנו לעבור בתוך לולאה על כל הקבצים בתיקייה.
  • הפונקציה endswith מסננת את הקבצים ששמם מסתיים ב jpg או png.

 

סיבוב וצביעה של תמונות

הסקריפט הבא פותח את התמונה, מסובב אותה ב-90%, ושומר.

# rotate
img = Image.open('images/pandas.jpg')
img.rotate(90).save('images/pandas_90deg.jpg')

והתוצאה:

 pillow rotate the image in 90 deg

הסקריפט הבא משנה את צבע התמונה לשחור לבן, ואז שומר.

# recolor to black and white
img = Image.open('images/pandas.jpg')
img.convert(mode='L').save('images/pandas_bnw.jpg')

 pillow recolor the image in black and white

 

שימוש בפילטרים

הספרייה מציעה הרבה פילטרים בסגנון פוטושופ שבהם אנחנו יכולים להשתמש באמצעות המודול ImageFilter. אז בואו נייבא את המודול:

# blur the image
from PIL import ImageFilter

הפילטר GaussianBlur מאפשר לנו לטשטש את התמונות:

img = Image.open('images/pandas.jpg')
img.filter(ImageFilter.GaussianBlur(radius=10)).save('images/pandas_blur.jpg')
  • אפשר לשנות את המספר שמעבירים לפילטר ולקבל תמונה מטושטשת יותר או פחות.

התוצאה:

 pillow blurs the image

הפילטר CONTOUR ישאיר רק את קווי המתאר:

img = Image.open('images/pandas.jpg')
img.filter(ImageFilter.CONTOUR).save('images/pandas_contour.jpg')

 pillow manipulationleaves only the contour of the image

ומה בנוגע לפילטר הבא?

img = Image.open('images/pandas.jpg')
img.filter(ImageFilter.EDGE_ENHANCE).save('images/pandas_enhance.jpg')

 pillow edge enhance filter

מעוניינים באפקט מוגבר? נסו את הפילטר EDGE_ENHANCE_MORE:

img = Image.open('images/pandas.jpg')
img.filter(ImageFilter.EDGE_ENHANCE_MORE).save('images/pandas_en_more.jpg')

פילטרים נוספים הם:

ImageFilter.DETAIL
ImageFilter.EMBOSS
ImageFilter.FIND_EDGES
ImageFilter.SMOOTH
ImageFilter.SHARPEN

ספריית Pillow עשירה בפילטרים ואפשרויות. אתם מוזמנים לקרוא את התיעוד הרשמי בקישור: Pillow image library

לכל המדריכים בסדרה ללימוד פייתון

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

הוסף תגובה חדשה

 

= 7 + 5