תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

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

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

אחת המשימות הנפוצות ביותר בתכנות פייתון היא עבודה עם תמונות. במדריך זה הסבר על ספרית 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 כוכבים

 

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

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

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

מתי הוקמה המדינה?

 

תמונת המגיב

גיל בתאריך: 04.09.2020

הי אני מחפש סקריפט שכותב לתוך תיאור התמונה. המטרה הסופית היא להריץ סקריפט שיקח תיאור פריט מקובץ אקסל ויכניס אותו לתאור התמונה. אשמח לתשובה

תמונת המגיב

מיכל בתאריך: 14.11.2022

החומר מוסבר מעולה על יד בקוד בצורה ברורה ונעימה לעין בזכות הסיכום הזה הצלחתי תודה רבה