בפעם
הקודמת סיפקנו מבוא לכתיבת תוספים
בעזרת פייתון ל-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
מתכון
לשבת: עוגת שכבות עם הגימפ,
ווטסאפ
| |
|