יישומים רבים חושפים את ממשקיהם לשפות שונות, ביניהן שפות סקריפט - מה שמקל על כתיבת הרחבות והתאמתם לצורת העבודה שלכם ולפעולות אשר מבוצעות בצורה סדרתית. כך לדוגמא Emacs ו-Lisp, פרל ופייתון עם Vim ו-ׂGimp, פייתון ב-Blender וכן הלאה.
במאמר זה נכתוב תוסף ל-Gimp ב-פייתון. זהו החלק הראשון מבין שניים. בחלק זה נספק מבוא ונכתוב את השלד של התוסף, כאשר בחלק השני נכתוב את התוסף עצמו.
דרישות מקדימות
- Gimp
- פייתון
- ממשק הפייתון של ה-Gimp. באובונטו/דביאן נקרא gimp-python, במנדרייק gimp2_0-python, משתמשי סלאק ו-arch יצטרכו לבנות מחדש את החבילה ולהוסיף ל-configure את --enable-python וכן הלאה.
אז איך
כותבים תוסף ? בגדול מדובר בפונקציה, ורישומה ברשימת התוספים
הזמינים ל-Gimp.
ישנם 2 מצבים בסיסיים: תוסף המבצע עבודה על תמונה/שכבה קיימת ותוסף אשר
יוצר תמונה חדשה.
ההבדלים העיקריים בעבודה על תמונה קיימת:
- התוסף יהיה זמין רק מהתפריט של תמונה קיימת (להבדיל מהתפריט הראשי של
ה-Gimp)
- הפונקציה של התוסף תקבל 2 פרמטרים נוספים (עוד על כך בהמשך).
בדוגמא כאן ניצור שלד של התוסף אשר מקבל מחרוזת עם הגדרות נוספות ויוצר
תמונה (ריקה כרגע) בגודל המבוקש. במקום לדבר מסביב, נקפוץ למים. נציג את
הקוד של התוסף ולאחר מכן נסביר אותו.
יש למקם את הקובץ בתיקית plug-ins של ה-gimp הפרטית שלכם. הנתיב הוא
~/.gimp-2.x/plug-ins. תחליפו את ה-x בגרסת ה-gimp שלכם (לדוגמא
אצלי ה-gimp הוא 2.2 לכן x=2). הקובץ צריך להיות עם הרשאות ריצה.
1 #!/usr/bin/env python
2
3 from gimpfu import *
4
5 default_font = "Sans 12"
6 default_text = "Place text here"
7 default_width = 320
8 default_height = 200
9
10 def python_my_text(text, font, width, height):
11 # create the new image
12 img = gimp.Image(width, height, RGB_IMAGE)
13 bg_layer = gimp.Layer(img, "Background", img.width,
14 img.height, RGBA_IMAGE, 100, NORMAL_MODE)
15 pdb.gimp_drawable_fill(bg_layer, WHITE_FILL)
16 img.add_layer(bg_layer)
17
18 gimp.Display(img)
19 gimp.displays_flush()
20
21 register(
22 "python_my_text",
23 "Creates a text with feathered background",
24 "This is My text effect",
25 "Meir Kriheli",
26 "Meir Kriheli, MKsoft systems",
27 "2005",
28 "<Toolbox>/Python-Fu/Logos/MyText",
29 "RGB*, GRAY*",
30 [
31 (PF_STRING, "text", "Text", default_text),
32 (PF_FONT, "font","Font", default_font),
33 (PF_INT, "image_width","Image width", default_width),
34 (PF_INT, "image_height","Image height", default_height)
35 ],
36 [],
37 python_my_text
38 )
39
40 main()
בשורה 3 אנו מייבאים את את הממשקים השונים מ-gimpfu. זהו הממשק אשר מקל על
כתיבת התוספים (ישנו ממשק נוסף אך מצריך "התעסקות" רבה יותר עם הקוד).
שורות 5-8 מגדירות ברירות מחדל אשר נשתמש בהן ברישום.
שורות 10-19 הן הפונקציות המרכיבות את התוסף.
שורות 21-38 קוראות לפונקציית ה-register אשר רושמת את התוסף - כאן
השתמשנו בקבועים אשר הוגדרו למעלה.
שורה 40 קוראת לפונקציית ה-main אשר מריצה את התוסף.
<span style="font-weight: bold;">רישום
הפונקציה</span>
כמו שהזכרנו כבר, פונקציית ה-register של gimpfu אחראית לרישום התוסף.
הפונקצייה מקבלת את הפרמטרים הבאים:
- שם התוסף (שורה 22)
- קטע המתאר את התוסף (שורה 23)
- מחרוזת עזרה (שורה 24)
- שם מחבר (שורה 25)
- זכויות שמורות ל (שורה 26)
- תאריך (שורה 27)
- נתיב בתפריט (שורה 28). תוספים שיופיעו בתפריט הראשי של ה-gimp
יתחילו ב- <ToolBox>. אלו שיופיעו בתפריט של תמונה יתחילו
ב- <Image>
- סוגי התמונה שאנו עובדים עליה (שורה 29)
- רשימת הפרמטרים שהתוסף אמור לקבל (שורות 30-35). עוד על כך
בהמשך
- התוצאה שתוסף אמור להחזיר (שורה 36). שלנו לא מחזיר כלום,
נתעלם ממנה כעת
- הפונקציה אשר מבצעת את הדרוש (שורה 37). כמובן ששם הפונקציה
הוא זה אשר הגדרנו בשורה 10
כך נראה התפריט של ה-gimp עם טעינתו. כמו שניתן לראות התוסף מופיע במקום
שהגדרנו עבורו:
<img src="whatsup/images/articles/gimp_plugin_menu.png" alt="Gimp Menu"/>
נתעכב על הגדרת הפרמטרים הדרושים לפונקציה (שורות 30-35). זוהי הרשימה
המגדירה את הפרמטרים הדרושים לנו. ה-gimp יציג ממשק משתמש עם ההגדרות
שלנו, ולאחר מכן יעביר את הערכים לפונקציה שלנו. כל פרמטר מכיל את ההגדרות
הבאות:
- סוג הפרמטר (לרשימה מלאה ראו בתיעוד המקושר בסוף המאמר).
- שם הפרמטר
- תאור (יופיע בממשק)
- ערך ברירת מחדל
- פרמטר נוסף (אופציונלי) הוא extra. משמש רק בסוגי משתנים ספציפיים.
ה-gimp יציג הפרמטרים שביקשנו בצורה דומה לבאה:
<img src="whatsup/images/articles/gimp_plugin_ui.png" alt="Gimp parameters"/>
לאחר מכן יעביר אותם לפונקציה שלנו (שימו לב להגדרת הפרמטרים אשר היא
מקבלת בשורה 10).
<span style="font-weight: bold;">הפונקציה
עצמה</span>
הפונקציה מקבלת את הפרמטרים אשר הגדרנו. יש לציין שאם הפונקציה היא כזו
שעובדת על תמונה/שכבה קיימת, היא תקבל אוטומטית 2 פרמטרים נוספים לפני
הפרמטרים שלנו (לכן לא לשכוח להוסיף אותם בתחילת הפרמטרים שהפונקציה
מקבלת):
- img התמונה שאנו עובדים
- drawable המשטח (כגון שכבה, בחירה) שעליו אנו אמורים לפעול
שורה 12: אנו יוצרים תמונה ברוחב ובגובה המבוקשים (אשר הועברו לפונקציה)
שורות 13-14: אנו יוצרים שכבה חדשה בשם Background, ברוחב כל התמונה, עם
אטימות מלאה (100%) ומצב שכבה נורמלי.
שורה 15: אנו ממלאים את השכבה בצבע לבן. לצורך כך אנו משתמשים ב-pdb, ה-
plugin database אשר חושף פונקציונליות עשירה. כדי לקבל רשימה ותיעוד של
הפונקציות הזמינות ב-pdb אפשר לבחור מתפריט ה-Gimp את Xtns | Procedure
browser .
שורה 16: אנו מוספים את השכבה החדשה לתמונה שיצרנו בשורה 12
שורות 18-19: מורים ל-Gimp להציג את התמונה ולרענן את התצוגה.
עד כאן להפעם.
קישורים:
תיעוד PyGimp, gimp.org
מתכון לשבת: עוגת שכבות עם הגימפ, ווטסאפ | |
|