עבודה עם תמונות בפייתון
אחת המשימות הנפוצות ביותר בתכנות פייתון היא עבודה עם תמונות. במדריך זה הסבר על ספרית Pillow שהופכת את העבודה עם תמונות ובכלל כך פתיחה, עריכה ושימוש בפילטרים לפשוטה מאוד.
הספרייה מכונה גם PIL ראשי תיבות של Python Imaging Library.
התקנת הספרייה
PIL לא מובנה בתוך פייתון. לכן אנחנו צריכים להתקין אותה באמצעות pip. הריצו את הפקודה הבאה בשורת הפקודות כדי להתקין את הספרייה:
pip install Pillow
סביבת העבודה
הקוד להלן ייבא את הספריות שישמשו אותנו במדריך:
import os
from PIL import Image
- המודול os מאפשר לנו לעבוד עם קבצים.
- המודול Image של ספריית PIL ישמש אותנו למניפולציה של התמונות.
את התמונות ריכזתי בתוך תיקייה ששמה images. בתוך התיקייה שלוש תמונות:
- 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:
שינוי סוג הקובץ
הפקודה save מאפשרת לנו לבחור את פורמט הקובץ שלתוכו נשמור את התמונה. נפתח קובץ jpg ונשמור אותו כ-png:
img = Image.open('images/pandas.jpg')
img.save('images/pandas.png')
כשנפתח את התיקייה images נגלה שנוסף לתמונת pandas.jpg המקורית, PIL יצר תמונה נוספת שגם שמה pandas עם ההרחבה png.
ממדי התמונה
התכונה 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')
והתוצאה:
הסקריפט הבא משנה את צבע התמונה לשחור לבן, ואז שומר.
# recolor to black and white
img = Image.open('images/pandas.jpg')
img.convert(mode='L').save('images/pandas_bnw.jpg')
שימוש בפילטרים
הספרייה מציעה הרבה פילטרים בסגנון פוטושופ שבהם אנחנו יכולים להשתמש באמצעות המודול 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')
- אפשר לשנות את המספר שמעבירים לפילטר ולקבל תמונה מטושטשת יותר או פחות.
התוצאה:
הפילטר CONTOUR ישאיר רק את קווי המתאר:
img = Image.open('images/pandas.jpg')
img.filter(ImageFilter.CONTOUR).save('images/pandas_contour.jpg')
ומה בנוגע לפילטר הבא?
img = Image.open('images/pandas.jpg')
img.filter(ImageFilter.EDGE_ENHANCE).save('images/pandas_enhance.jpg')
מעוניינים באפקט מוגבר? נסו את הפילטר 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 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.