Bạn có cần phải "xả hơi" không? Không ư? Thế thì hãy tiếp tục bài học thứ tư -- tập lệnh Script-Fu đầu tiên của bạn.
Một trong những lệnh phổ biến nhất mà tôi sử dụng trong GIMP là tạo ra một hộp với vài chữ trong đó cho một trang web (text box), một logo hoặc cho bất kỳ thứ gì đó. Tuy nhiên, bạn hoàn toàn không biết khi bắt đầu bạn làm cho ảnh lớn bao nhiêu. Bạn không biết khoảng trống cần để điền chữ với phông chữ và kích thước chữ mà bạn muốn.
Các bậc thầy (và cả các "sinh viên" nữa) về Script-Fu sẽ nhanh chóng nhận ra rằng khó khăn này có thể dễ dàng giải quyết và tự động hóa bằng Script-Fu.
Do vậy chúng ta sẽ viết một tập lệnh, gọi là Text Box (hộp chữ), để nó tạo ra một ảnh có kích thước đúng sao cho phù hợp khít khao quanh một dòng chữ người dùng nhập vào. Chúng ta cũng sẽ cho phép người dùng chọn phông chữ, kích thước và màu chữ.
Cho đến lúc này, chúng ta đã làm việc trong cửa sổ console của Script-Fu. Tuy nhiên, bây giờ chúng ta sẽ chuyển qua biên tập các tập tin văn bản tập lệnh.
Bạn đặt các tập lệnh của mình ở đâu là một vấn đề cần quan tâm -- nếu có quyền truy nhập vào thư mục tập lệnh mặc định của GIMP, bạn có thể giữ các tập lệnh của mình ở đó. Tuy nhiên tôi thích giữ các tập lệnh của riêng mình trong thư mục tập lệnh riêng của tôi, để tách biệt chúng với các tập lệnh đã được cài đặt sẵn.
Trong thư mục .gimp-2.0 mà GIMP đã tạo ra trong thư mục nhà của bạn, bạn cần tạo ra một thư mục gọi là scripts. GIMP sẽ tự động tìm trong thư mục .gimp-2.0 của bạn một thư mục tập lệnh, và thêm các tập lệnh trong thư mục này vào cơ sở dữ liệu Script-Fu. Bạn sẽ lưu các tập lệnh của mình trong đó.
Mỗi tập lệnh Script-Fu định nghĩa ít nhất là một hàm số, đó là hàm số chính của tập lệnh. Đó chính là chỗ bạn thực hiện công việc.
Mỗi tập lệnh cũng phải đăng ký với cơ sở dữ liệu thủ tục (procedural database), vì thế bạn có thể truy nhập nó trong GIMP.
Chúng ta sẽ định nghĩa hàm số chính trước:
(define (script-fu-text-box inText inFont inFontSize inTextColor))
Ở đây chúng ta đã định nghĩa một hàm số được gọi là script-fu-text-box có bốn tham số, mà sau này sẽ tương ứng với đoạn văn bản, một kiểu chữ, kích thước chữ và màu chữ. Hàm số này hiện đang rỗng và do vậy không có chức năng gì. Cho đến lúc này mọi thứ đều ổn -- không có gì mới, chưa có gì hay ho cả.
Các quy ước đặt tên của Scheme "thích" các chữ thường và gạch nối, mà tôi đã tuân theo khi đặt tên hàm trên. Tuy nhiên, tôi đã không theo quy ước này khi đặt tên các tham số. Tôi thích các tên tham số và biến của tôi có tính chất mô tả nhiều hơn, do vậy tôi đã thêm tiền tố "in" vào các tham số nhờ đó tôi có thể nhanh chóng thấy rằng chúng là các giá trị được truyền (pass) vào tập lệnh, chứ không phải được tạo ra bởi nó. Tôi dùng tiền tố "the" đối với các biến được định nghĩa trong tập lệnh.
Đó là quy ước của GIMP trong việc đặt tên hàm số tập lệnh script-fu-abc của bạn, bởi vì sau đó khi chúng được liệt kê trong cơ sở dữ liệu thủ tục, tất cả chúng đều hiện lên trong script-fu khi bạn liệt kê các hàm. Điều này giúp phân biệt chúng với các plug-in khác.
Bây giờ chúng ta hãy đăng ký hàm trong GIMP. Điều này được thực hiện bằng cách gọi hàm script-fu-register. Khi GIMP đọc một tập lệnh, nó sẽ thực hiện hàm số này, là hàm đăng ký tập lệnh với cơ sở dữ liệu thủ tục. Bạn có thể đặt phép gọi hàm này bất kỳ khi nào bạn cần trong tập lệnh của mình, nhưng tôi thì thường đặt nó ở phần cuối, sau tất cả các mã khác.
Đây là các bước để đăng ký hàm số (tôi sẽ giải thích tất cả các tham số của nó ngay):
(script-fu-register
"script-fu-text-box" ;func name
"Text Box" ;menu label
"Creates a simple text box, sized to fit\
around the user's choice of text,\
font, font size, and color." ;description
"Michael Terry" ;author
"copyright 1997, Michael Terry" ;copyright notice
"October 27, 1997" ;date created
"" ;image type that the script works on
SF-STRING "Text:" "Text Box" ;a string variable
SF-FONT "Font:" "Charter" ;a font variable
SF-ADJUSTMENT "Font size" '(50 1 1000 1 10 0 1)
;a spin-button
SF-COLOR "Color:" '(0 0 0) ;color variable
)
(script-fu-menu-register "script-fu-text-box" "<Toolbox>/Xtns/Script-Fu/Text")
Nếu bạn lưu các hàm số này trong một tập tin văn bản với đuôi mở rộng .scm trong thư mục tập lệnh của bạn, và sau đó chọn ->->, tập lệnh mới này sẽ xuất hiện thành ->->->.
Nếu bạn kích hoạt (invoke) tập lệnh mới này, nó sẽ chẳng làm thứ gì cả, tất nhiên rồi, nhưng bạn có thể thấy các dấu nhắc (prompt) mà bạn đã tạo ra khi đăng ký tập lệnh (tôi sẽ giải thích thêm về những gì ta đã làm trong phần sau).
Cuối cùng, nếu bạn kích hoạt trình duyệt DB Browser (trình duyệt cơ sở dữ liệu thủ tục -- ->), bạn sẽ thấy rằng tập lệnh của chúng ta lúc này đã xuất hiện trong cơ sở dữ liệu.
Để đăng ký tập lệnh của chúng ta vào GIMP, chúng ta gọi hàm script-fu-register, điền vào bảy tham số được yêu cầu và thêm các tham số riêng của tập lệnh của chúng ta, cùng với một mô tả và giá trị mặc định cho mỗi tham số.
Các tham số bắt buộc
Tên của hàm chúng ta đã định nghĩa. Đây là hàm được gọi khi tập lệnh của chúng ta được kích hoạt (điểm vào (entry-point) tập lệnh của chúng ta). Điều này cần thiết bởi vì chúng ta có thể định nghĩa các hàm bổ sung trong cùng một tập tin, và GIMP cần phải biết hàm nào trong số chúng để gọi. Trong ví dụ của chúng ta, chúng ta chỉ định nghĩa một hàm, hộp-chữ (text-box), mà chúng ta đã đăng ký.
Vị trí trong menu nơi mà tập lệnh sẽ được chèn vào. Vị trí chính xác của tập lệnh được chỉ định giống như đường dẫn trong Unix, với gốc (root) của đường dẫn là hộp công cụ hoặc nhắp chuột phải.
Nếu tập lệnh của bạn không hoạt động trên ảnh đang được mở (và do vậy tạo ra một ảnh mới, giống như tập lệnh Text Box của chúng ta), bạn nên chèn nó vào menu của hộp công cụ -- đây là menu trong cửa sổ chính của GIMP (nơi có tất cả các công cụ "yên vị": các công cụ chọn, kính lúp,...).
Nếu tập lệnh của bạn nhắm vào một ảnh đang được chỉnh sửa, bạn nên chèn nó vào menu nào xuất hiện khi bạn nhắp chuột phải trên một ảnh đang mở. Phần còn lại của đường dẫn chỉ về các danh sách menu, menu và menu con. Do vậy chúng ta đã đăng ký tập lệnh Text Box trong menu Text của menu Script-Fu của Menu Xtns của hộp công cụ (->->->).
Nếu bạn để ý, menu con Text trong menu Script-Fu không có ở đó khi chúng ta bắt đầu -- GIMP tự động tạo ra bất kỳ menu nào chưa có.
Một mô tả tập lệnh của bạn, để nó hiển thị trong trình duyệt DB Browser.
Tên của bản (tác giả của tập lệnh).
Thông tin về Bản quyền.
Ngày tập lệnh được viết, hoặc lần chỉnh sửa lại sau cùng của tập lệnh.
Các kiểu ảnh tập lệnh làm việc trên đó. Mục này có thể là bất kỳ kiểu nào trong số sau:RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Hoặc nó có thể hoàn toàn không có gì -- trong trường hợp của ta, chúng ta đang tạo ra một ảnh và do vậy không cần phải định nghĩa kiểu ảnh mà chúng ta làm việc.
Một khi chúng ta đã liệt kê các tham số cần thiết, sau đó chúng ta cần phải liệt kê các tham số nào tương ứng với các tham số tập lệnh của chúng ta cần. Khi chúng ta liệt kê các tham số này, chúng ta cung cấp gợi ý về kiểu của chúng là gì. Như vậy là để cho hộp thoại xuất hiện khi người dùng chọn tập lệnh của ta. Chúng ta cũng cung cấp một giá trị mặc định.
Phần tiến trình đăng ký này có định dạng sau:
|
Kiểu tham số |
Mô tả |
Ví dụ |
|---|---|---|
|
SF-VALUE |
Chấp nhận con số và chuỗi. Lưu ý là không có dấu ngoặc kép đối chữ mặc định, vì thế nên dùngSF-STRING. |
42 |
|
SF-STRING |
Chấp nhận các chuỗi |
"chữ gì đó"" |
|
SF-COLOR |
Chỉ định rằng cần một màu trong tham số này |
'(0 102 255) |
|
SF-TOGGLE |
Một ô đánh dấu được hiển thị, có giá trị Boolean. |
TRUE hay FALSE |
|
SF-IMAGE |
Nếu tập lệnh của bạn hoạt động trên một ảnh đang mở, đây phải là tham số đầu tiên sau các tham số bắt buộc. GIMP sẽ truyền một tham chiếu đến ảnh bằng tham số này. |
3 |
|
SF-DRAWABLE |
Nếu tập lệnh của bạn hoạt động trên một ảnh đang mở, đây phải là tham số thứ hai sau tham số SF-IMAGE. Nó tham chiếu đến lớp đang được kích hoạt. GIMP sẽ truyền một tham chiếu đến lớp đang được kích hoạt bằng tham số này. |
17 |