Skip to content

ארכיטקטורת GIMP 3.0 והסבת תוספי Python

המאמר המקורי באנגלית

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

המועמדת הראשונה לשחרור הוכרזה ב־6 בנובמבר 2024, ו־GIMP 3.0 פורסמה ב־16 במרץ 2025. זוהי סקירה של המעבר ההיסטורי, ולא הכרזה עכשווית על RC. ההסבה ל־GTK3, המסננים הלא הרסניים, העבודה על ניהול צבע וממשק התוספים המחודש היו שינויים משמעותיים. ראו הודעת RC1 ו־הודעת הגרסה הסופית.

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

הדרך הארוכה ל־GTK3: טיפול בחוב טכני בקנה מידה גדול

GTK נוצרה בפרויקט GIMP בשנות התשעים, ובהמשך שימשה יישומים רבים מעבר ל־GIMP, ובהם GNOME. ההיסטוריה הזו ממחישה כיצד התפתחות של יישום ושל ערכת הממשק שלו יכולה להיות תלויה זו בזו.

GIMP 2.10 השתמשה ב־GTK2. המעבר ל־GTK3 היה תנאי לשילוב טוב יותר בסביבות שולחן עבודה חדשות, לרבות HiDPI ו־Wayland. ההתנהגות בפועל עדיין תלויה במערכת ההפעלה, בהגדרות המסכים ובחבילה שהותקנה.

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

  • תמיכת Wayland: GTK3 מאפשרת עבודה טבעית עם Wayland בחבילות Linux נתמכות. אין בכך לבדו הוכחה לשיפור נמדד בהשהיה או באבטחה בכל התקנה.
  • תמיכת HiDPI: סמלים וגדלי ממשק הניתנים להתאמה משפרים שימוש במסכים ברזולוציה גבוהה. בדקו את ההתנהגות עם מסכים בעלי קני מידה שונים במערכת עצמה, במקום להניח שכל שילוב של 4K או 5K פועל באופן זהה.
  • תמיכה בערכות עיצוב: GTK3 משתמשת בעיצוב מבוסס CSS לרכיבי הממשק ומספקת בסיס מודרני יותר. זו יכולת, ולא הבטחה שכל הגדרת עיצוב של הפלטפורמה תועתק אוטומטית.

התפתחות מנוע העיבוד: GEGL ו־babl

GEGL מספקת בסיס לעיבוד תמונה מבוסס גרף, ו־babl מטפלת בהמרות פורמט פיקסלים וצבע. GIMP השתמשה בספריות הללו גם לפני גרסה 3.0; תהליך המסננים הלא הרסניים החדש נשען על ההשקעה הזו.

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

הכותרת החשובה למפתחים: ממשק Python 3 חדש לחלוטין

ממשק PyGimp הישן היה תלוי ב־Python 2, שהתמיכה בו מצד הפרויקט הסתיימה ב־2020. הדבר הקשה על תחזוקה ואריזה. GIMP 3 תומכת בתוספי Python 3 דרך ממשקים המבוססים על introspection; מדובר בהגירה, לא בתאימות אוטומטית לתסריטים ישנים.

GIMP 3.0 מוציאה את PyGimp משימוש ומחליפה אותה ב־GObject Introspection. זהו שינוי ארכיטקטוני גדול. במקום לכתוב ידנית שכבות קישור ייעודיות לכל שפה, GIMP מייצאת כעת את ממשקי C שלה לקובצי מטא־נתונים. סביבות כגון PyGObject עבור Python 3 או Gjs עבור JavaScript יכולות לצרוך את המטא־נתונים באופן דינמי.

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

כתיבת תוסף GIMP 3.0: אז והיום

כדי להמחיש עד כמה חוויית הפיתוח נעשתה נקייה יותר, נבחן כתיבת תוסף פשוט לעיבוד תמונה ב־GIMP 3.0 באמצעות ממשק Python 3 החדש.

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

המקור ערבב מוסכמות קריאה ישנות של PDB עם GIMP 3 ועם חתימת callback מיושנת. הקטע הבא מדגים במקום זאת את דפוס מסנן ה־drawable ב־GIMP 3 עבור תמונה ו־drawable שכבר התקבלו. זה אינו תוסף עצמאי רשום, והקטע לא הורץ כאן. ממשק המסננים הציבורי נוסף ב־RC2, לאחר RC1; עיינו ב־מדריך המסננים ובמאפייני פעולת GEGL המותקנת.

# Illustrative GIMP 3 operation fragment; not a complete registered plug-in.
import gi
gi.require_version("Gimp", "3.0")
from gi.repository import Gimp

def add_blur(image, drawable):
    image.undo_group_start()
    try:
        effect = Gimp.DrawableFilter.new(drawable, "gegl:gaussian-blur", "Example blur")
        config = effect.get_config()
        config.set_property("std-dev-x", 5.0)
        config.set_property("std-dev-y", 5.0)
        effect.update()
        drawable.append_filter(effect)
    finally:
        image.undo_group_end()
    Gimp.displays_flush()

למה זה חשוב ל־CI/CD ולאוטומציה

אולי אתם שואלים: למה לי להתעניין בתוספי GIMP אם אפשר פשוט להשתמש ב־Pillow, הידועה גם כ־PIL, או ב־ImageMagick בתסריטים שלי?

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

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

  • תהליכי נכסים אוטומטיים למשחקים: ייצוא באצוות של קובצי פרויקט מורכבים מסוג .xcf למרקמי WebP, PNG או DDS ממוטבים, תוך החלה תוכנתית של מצבי מיזוג שכבות מוגדרים.
  • יצירת נכסים מקומיים: החלפה דינמית של שכבות טקסט או פרופילי צבע לפי מפתחות לוקליזציה, כדי ליצור אוטומטית אלפי באנרים שיווקיים או רכיבי ממשק.
  • עיבוד מוקדם למערכי נתונים: החילו המרות צבע והגדרות ייצוא מכוונות לפני אימון. בדקו פרופילי צבע, דיוק, מטא־נתונים ושחזור התוצאות; תהליך GIMP אינו הופך מערך נתונים אוטומטית למתאים ללמידת מכונה.

הלקח מארגון מחדש של פרויקטים ותיקים

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

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

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

סיכום ומה הלאה

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

RC1 הייתה גרסת בדיקה, לא הבטחה גורפת ליציבות. גרסה 3.0 יצאה בהמשך ב־16 במרץ 2025. בחרו חבילה יציבה הנתמכת כיום באתר הפרויקט ובדקו תוספים וקובצי XCF לדוגמה לפני אימוץ גרסה חדשה בתהליך נכסים.

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

Post a Comment

Previous Post Next Post