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

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

quick_linkהרחיבו את ה-Gimp: חלק ב'

published at 14/05/2005 - 14:41 · ‏פורסם mksoft · ‏tags גימפ , מדריכים ומגזינים · שלח לחברידידותי למדפסת
גימפ בפעם הקודמת סיפקנו מבוא לכתיבת תוספים בעזרת פייתון ל-Gimp, הפעם נסיים את העבודה. בתוך ההסבר לקוד תמצאו גם טיפ נחמד כיצד למרכז בחירה (כגון טקסט) בצורה קלה בגימפ.

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



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

- ניתן לקבל רשימה מלאה של הפונקציות השונות, הפרמטרים ותאור בעזרת בחירת
Xtns | Procedure Browser מתפריט ה-Gimp. ניתן גם לחפש ברשימה משם.


התמונה הסופית תהיה מורכבת מ-3 שכבות: רקע לבן, הטקסט עצמו ואפקט ה-feather. כמו בפעם הקודמת, נציג את הקוד ולאחר מכן נסביר אותו. הפעם נתמקד בפונקציית python_my_text שמבצעת את העבודה (בשאר, כגון רישום הפונקציה התמקדנו בחלק הקודם).
1 #!/usr/bin/env python 2 3 from gimpfu import * 4 import re 5 6 default_font = "Sans 24" 7 default_text = "Place text here" 8 default_width = 320 9 default_height = 200 10 default_color = (0,64,192) 11 12 def python_my_text(text, font, color, width, height): 13 # create the new image 14 img = gimp.Image(width, height, RGB_IMAGE) 15 16 img.disable_undo() 17 18 # White background layer 19 bg_layer = gimp.Layer(img, "Background", img.width, 20 img.height, RGBA_IMAGE, 100, NORMAL_MODE) 21 pdb.gimp_drawable_fill(bg_layer, WHITE_FILL) 22 img.add_layer(bg_layer) 23 24 # Text layer 25 txt_layer = gimp.Layer(img,"Text", img.width, 26 img.height, RGBA_IMAGE, 100, NORMAL_MODE) 27 img.add_layer(txt_layer) 28 pdb.gimp_edit_clear(txt_layer) 29 30 # Set the foreground color 31 pdb.gimp_context_set_foreground(color) 32 33 # Get the font size from selected font 34 font_size = re.search(r' (\d+)$',font).group(1) 35 36 # Draw the text 37 sel = pdb.gimp_text_fontname(img, txt_layer , 0, 0, text, -1, TRUE, font_size, POINTS, font) 38 39 # we'll use a trick to center the text (cut/paste) 40 pdb.gimp_edit_cut(sel) 41 floating = pdb.gimp_edit_paste(txt_layer, False) 42 pdb.gimp_floating_sel_anchor(floating) 43 44 # This layer holds the feather effect 45 feather_layer = gimp.Layer(img,"Feather", img.width, 46 img.height, RGBA_IMAGE, 100, NORMAL_MODE) 47 img.add_layer(feather_layer) 48 pdb.gimp_edit_clear(feather_layer) 49 50 #grow and feather the slection 51 pdb.gimp_selection_layer_alpha(txt_layer) 52 pdb.gimp_selection_grow(img, 5) 53 pdb.gimp_selection_feather(img, 5) 54 55 pdb.gimp_edit_fill(feather_layer,0) 56 57 # now let's clear some white space 58 pdb.gimp_selection_layer_alpha(txt_layer) 59 pdb.gimp_selection_grow(img, 2) 60 pdb.gimp_selection_feather(img, 4) 61 pdb.gimp_edit_clear(feather_layer) 62 63 pdb.gimp_selection_none(img) 64 65 img.enable_undo() 66 67 gimp.Display(img) 68 69 register( 70 "python_my_text", 71 "Creates a text with feathered background", 72 "This is My text effect", 73 "Meir Kriheli", 74 "Meir Kriheli, MKsoft systems", 75 "2005", 76 "<Toolbox>/Python-Fu/Logos/MyText", 77 "RGB*, GRAY*", 78 [ 79 (PF_STRING, "text", "Text", default_text), 80 (PF_FONT, "font","Font", default_font), 81 (PF_COLOR, "color", "Color", default_color), 82 (PF_INT, "image_width","Image width", default_width), 83 (PF_INT, "image_height","Image height", default_height) 84 ], 85 [], 86 python_my_text 87 ) 88 89 main()

שורות 14-16: יוצרים תמונה חדשה ומבטלים את אפשרות ה-undo (כך חוסכים בזכרון ובזמן). נאפשר אותה בחזרה לאחר שנסיים את העבודה.

שורות 19-22: יוצרים שכבה חדשה ריקה וממלאים אותה בצבע לבן (זו שכבת הרקע).

שורות 25-28: יוצרים שכבה חדשה עבור הטקסט, ודואגים שהיא תהיה ריקה.

שורה 31: קובעים את הצבע לזה שנבחר ע"י המשתמשים.

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

שורה 37: מציירים את הטקסט.

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

שורות 45-48: מוספים שיכבה חדשה בה ניצור את אפקט ה-feather. לא לשכוח לדאוג שהיא תהיה ריקה (לפעמים ישנו "לכלוך" בשכבות חדשות שנוצרות).

שורות 51-53: אנו הופכים את ערוץ האלפא של שכבת הטקסט לבחירה (כך נבחר הטקסט הקיים שם), מגדילים את הבחירה ב-5 ומוסיפים לה feather ברדיוס של 5 פיקסלים.

שורה 55: ממלאים את הבחירה בצבע הנבחר.

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

כעת מתחילים לנקות את השאריות:

שורה 63: מבטלים את הבחירה.

שורה 65: מאפשרים undo.

שורה 67: מציגים את היצירה למשתמש.


תצלומי מסך של תוצאות עבודתינו:

מסך הזנת הפרמטרים:
<img src="whatsup/images/articles/gimp2_param.png" alt="param screen"/>

התוצאה. שימו לב לשכבות השונות והשמות שלהן:
<img src="whatsup/images/articles/gimp2_results.png" alt="param screen"/>

קישורים:

הרחיבו לכם את ה-Gimp, ווטסאפ
תיעוד PyGimp‏, gimp.org
מתכון לשבת: עוגת שכבות עם הגימפ, ווטסאפ
 

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

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


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

הרחיבו את ה-Gimp: חלק ב' | כניסה / יצירת מנוי חדש | 1 תגובה
סף חסימה
  
ההערות הינן מטעם כותביהן. אין צוות האתר לוקח אחריות על תוכנן
Re: הרחיבו את ה-Gimp: חלק ב' (ניקוד: 1)
ע"י עידו ב 14/05/2005 - 14:49

(מידע על משתמש | שלח הודעה) http://http://
סחתיין על ההשקעה!

[ השב לזאת ]