ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin

quick_linkהרחיבו לכם את ה-Gimp

published at 27/04/2005 - 16:11 · ‏פורסם mksoft · ‏tags גימפ , מדריכים ומגזינים · שלח לחברידידותי למדפסת
גימפ יישומים רבים חושפים את ממשקיהם לשפות שונות, ביניהן שפות סקריפט - מה שמקל על כתיבת הרחבות והתאמתם לצורת העבודה שלכם ולפעולות אשר מבוצעות בצורה סדרתית. כך לדוגמא 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
מתכון לשבת: עוגת שכבות עם הגימפ, ווטסאפ
 

קישורים רלוונטיים

· עוד על גימפ
· חדשות מאת mksoft


הסיפור הנקרא ביותר בנושא גימפ:
מתכון לשבת: עוגת שכבות עם הגימפ

הרחיבו לכם את ה-Gimp | כניסה / יצירת מנוי חדש | 3 תגובות
סף חסימה
  
ההערות הינן מטעם כותביהן. אין צוות האתר לוקח אחריות על תוכנן
Re: הרחיבו לכם את ה-Gimp (ניקוד: 0)
ע"י פינגווין אנונימי ב 27/04/2005 - 20:11
יישר כח , קבל ח"ח

[ השב לזאת ]

Re: הרחיבו לכם את ה-Gimp (ניקוד: 0)
ע"י פינגווין אנונימי ב 28/04/2005 - 00:27
כל הכבוד על ההשקעה.
ח"ח

[ השב לזאת ]

Re: הרחיבו לכם את ה-Gimp (ניקוד: 0)
ע"י פינגווין אנונימי ב 29/04/2005 - 15:33
תודה על המדריך !
יש אפשרות לעבוד בשפות אחרות (perl?) או שאני צריך ללמוד פייתון? ;)

[ השב לזאת ]