### 3.4. Το πρώτο σας σενάριο Script-Fu

Do you not need to stop and catch your breath? No? Well then, let's proceed with your fourth lesson your first Script-Fu Script.

#### 3.4.1. Δημιουργία του σεναρίου πλαισίου κειμένου

Μια από τις πιο συνηθισμένες λειτουργίες που εκτελώ στο GIMP είναι η δημιουργία ενός πλαισίου με κάποιο κείμενο σε αυτό για μια ιστοσελίδα. Όμως, δεν ξέρετε ποτέ πόσο μεγάλη να κάνετε την αρχική εικόνα, όταν ξεκινάτε. Δεν ξέρετε πόσο χώρο το κείμενο θα καταλάβει το κείμενο με τη γραμματοσειρά και το μέγεθος της γραμματοσειράς που θέλετε.

Αυτό το πρόβλημα μπορεί να λυθεί και να αυτοματοποιηθεί με το Script-Fu.

Θα δημιουργήσουμε, συνεπώς, ένα σενάριο, που λέγεται πλαίσιο κειμένου, το οποίο δημιουργεί μια εικόνα με σωστό μέγεθος για να ταιριάξει εφαρμοστά γύρω από τη γραμμή του κειμένου που εισάγει ο χρήστης. Θα αφήσουμε επίσης το χρήστη να επιλέξει γραμματοσειρά, μέγεθος γραμματοσειράς και χρώμα κειμένου.

#### 3.4.2. Επεξεργασία και αποθήκευση των σεναρίων σας

Μέχρι τώρα, εργαζόμασταν στην Κονσόλα Script-Fu. Τώρα, ωστόσο, θα στραφούμε στην επεξεργασία αρχείων σεναρίου. Τα αρχεία σεναρίων πρέπει να είναι αρχεία απλού κειμένου που μπορείτε να επεξεργαστείτε σε ένα πρόγραμμα επεξεργασίας κειμένου ή κώδικα. Το όνομα που δίνετε δεν είναι τόσο σημαντικό, εκτός από το ότι μπορείτε να αναγνωρίσετε το σενάριο. Θα πρέπει να δώσετε στο αρχείο σεναρίου σας την επέκταση «.scm».

Το πού τοποθετείτε τα σενάρια σας είναι θέμα προτίμησης. Στις προτιμήσεις φακέλων του GIMP, μπορείτε να δείτε σε ποιους φακέλους το GIMP αναζητά σενάρια. Υπάρχει επίσης η δυνατότητα προσθήκης νέου φακέλου εκεί. Ο φάκελος όπου το GIMP αποθηκεύει τα δικά του σενάρια δεν είναι συνήθως η καλύτερη επιλογή για τα σενάρια σας, αλλά για τους υπόλοιπους μπορείτε να επιλέξετε αυτό που σας ταιριάζει καλύτερα.

#### 3.4.3. Τα απολύτως αναγκαία

Κάθε σενάριο Script-Fu ορίζει τουλάχιστον μια συνάρτηση, που είναι η κύρια συνάρτηση του σεναρίου. Εδώ είναι που εργαζόσαστε.

Κάθε σενάριο πρέπει επίσης να καταχωρείται στην διαδικασιακή βάση δεδομένων, έτσι ώστε να την προσπελάσετε μέσα από το GIMP.

Θα ορίσουμε την κύρια συνάρτηση πρώτα:

            (define (script-fu-text-box inText inFont inFontSize inTextColor))

Here, we've defined a new function called `script-fu-text-box` that takes four parameters, which will later correspond to some text, a font, the font size, and the text's color. The function is currently empty and thus does nothing. So far, so good nothing new, nothing fancy.

#### 3.4.4. Συμβάσεις ονομασίας

Οι συμβάσεις ονομασίας του Scheme φαίνεται να προτιμούν τα μικρά γράμματα με ενωτικές παύλες, που ακολούθησα στην ονομασία της συνάρτησης. Όμως, απομακρύνθηκα από τη σύμβαση με τις παραμέτρους. Μ' αρέσουν πιο περιγραφικά ονόματα για τις παραμέτρους και τις μεταβλητές μου και έτσι προσέθεσα το πρόθεμα "in" στις παραμέτρους, έτσι που να μπορώ γρήγορα να δω ότι είναι τιμές που πέρασαν στο σενάριο, παρά ότι δημιουργήθηκαν μέσα σε αυτό. Χρησιμοποίησα το πρόθεμα "the" για μεταβλητές που ορίζονται μες το σενάριο.

Είναι σύμβαση του GIMP να ονομάζει τις συναρτήσεις σεναρίων σας `script-fu-abc`, επειδή τότε, όταν καταχωρούνται στην διαδικασιακή βάση δεδομένων, όλες εμφανίζονται κάτω από το Script-Fu, όταν καταγράφετε τις συναρτήσεις. Αυτό επίσης βοηθά να διακρίνονται αυτά από τα πρόσθετα.

#### 3.4.5. Καταχώρηση της συνάρτησης

Τώρα, ας καταχωρήσουμε τη συνάρτηση με το GIMP. Αυτό γίνεται καλώντας τη συνάρτηση `script-fu-register`. Όταν το GIMP διαβάζει σε ένα σενάριο, θα εκτελέσει αυτή τη συνάρτηση, που καταχωρεί το σενάριο με τη διαδικασιακή βάση δεδομένων. Μπορείτε να τοποθετήσετε αυτήν την κλήση της συνάρτησης όπου θέλετε στο σενάριο σας, αλλά συνήθως την τοποθετώ στο τέλος, μετά από όλον τον υπόλοιπο κώδικα μου.

Να η λίστα για καταχώρηση αυτής της συνάρτησης (Θα εξηγήσω όλες τις παραμέτρους της σε λίγο):

      (script-fu-register
        "script-fu-text-box"                        ;function 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;\
          2009, the GIMP Documentation Team"        ;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" "<Image>/Filters/Tutorial")

Αποθηκεύστε αυτές τις συναρτήσεις σε ένα αρχείο κειμένου με την κατάληξη `.scm` σε έναν υποκατάλογο του καταλόγου σεναρίου σας, με το ίδιο όνομα με το αρχείο σεναρίου σας και, στη συνέχεια, επανεκκινήστε το GIMP. Το νέο σενάριο θα εμφανιστεί ως Φίλτρα → Μάθημα → Πλαίσιο Κειμένου.

Εάν καλέσετε αυτό το νέο σενάριο, δεν θα κάνει τίποτα, φυσικά, αλλά μπορείτε να δείτε τις προτροπές που δημιουργήσατε, όταν καταχωρήσατε το σενάριο (περισσότερες πληροφορίες για το τι κάναμε καλύπτονται πιο κάτω).

Τελικά, εάν καλέσετε τον περιηγητή διαδικασίας(Βοήθεια → Περιηγητής διαδικασίας), θα σημειώσετε ότι το σενάριό μας τώρα εμφανίζεται στη βάση δεδομένων.

#### 3.4.6. Βήματα για καταχώρηση του σεναρίου

Για να καταχωρήσετε το σενάριό μας με το GIMP, καλούμε τη συνάρτηση `script-fu-register`, συμπληρώνουμε τις εφτά απαιτούμενες παραμέτρους και προσθέτουμε τις παραμέτρους του δικού μας σεναρίου, μαζί με μια περιγραφή και προεπιλεγμένη τιμή για κάθε παράμετρο.

Οι απαιτούμενες παράμετροι

- Το όνομα της συνάρτησης που ορίσαμε. Αυτή είναι η καλούμενη συνάρτηση, όταν καλείται το σενάριο μας (το σημείο εισόδου στο σενάριο μας). Αυτό είναι απαραίτητο επειδή μπορούμε να ορίσουμε επιπρόσθετες συναρτήσεις μες το ίδιο αρχείο και το GIMP χρειάζεται να ξέρει ποια από αυτές τις συναρτήσεις να καλέσει. Στο παράδειγμα μας, ορίσαμε μόνο μία συνάρτηση, πλαίσιο κειμένου, που καταχωρήσαμε.

- Η ετικέτα μενού είναι το όνομα που θα εμφανίζεται στο μενού. Για να καθορίσετε τη θέση, ανατρέξτε στην ενότητα Τμήμα 3.4.9, «Καταχώρηση της θέσης μενού».

- Μία περιγραφή του σεναρίου σας, εμφανίζεται στον περιηγητή διαδικασίας.

- Το όνομά σας (ο συγγραφέας του σεναρίου).

- Πληροφορίες πνευματικών δικαιωμάτων.

- Η ημερομηνία δημιουργίας του σεναρίου, ή η τελευταία αναθεώρηση του σεναρίου.

- The types of images the script works on. This may be any of the following: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Or it may be none at all in our case, we're creating an image, and thus don't need to define the type of image on which we work.

#### 3.4.7. Καταχώρηση των παραμέτρων του σεναρίου σας

Αφού έχουμε καταγράψει τις απαιτούμενες παραμέτρους, τότε χρειαζόμαστε να καταγράψουμε τις παραμέτρους που αντιστοιχούν στις παραμέτρους που το σενάριο μας χρειάζεται. Όταν καταγράφουμε αυτές τις παραμέτρους, δίνουμε υποδείξεις όπως ποιος είναι ο τύπος τους. Αυτό είναι για το διάλογο που εμφανίζεται όταν ο χρήστης επιλέγει το σενάριο μας. Δίνουμε επίσης μια προεπιλεγμένη τιμή.

Αυτή η ενότητα της διαδικασίας καταχώρησης έχει την πιο κάτω μορφή:

Τύπος παραμέτρων | Περιγραφή | Παράδειγμα
--- | --- | ---
`SF-IMAGE` | Εάν το σενάριο σας ενεργεί σε μια ανοιχτή εικόνα, αυτό θα πρέπει να είναι η πρώτη παράμετρος μετά τις απαιτούμενες παραμέτρους. Το GIMP θα περάσει σε μια αναφορά προς την εικόνα αυτήν την παράμετρο. | 3
`SF-DRAWABLE` | Εάν το σενάριο σας ενεργεί σε μια ανοιχτή εικόνα, αυτό θα πρέπει να είναι η δεύτερη παράμετρος μετά την παράμετρο `SF-IMAGE`. Αναφέρεται στην ενεργή στρώση. Το GIMP θα περάσει σε μια αναφορά προς την ενεργή στρώση αυτήν την παράμετρο. | 17
`SF-STRING` | Αποδέχεται αλφαριθμητικά. | "Κάποιο κείμενο"
`SF-COLOR` | Δείχνει ότι ένα χρώμα απαιτείται σε αυτήν την παράμετρο. | '(0 102 255)
`SF-TOGGLE` | Ένα πλαίσιο ελέγχου εμφανίζεται, για τη λήψη μιας τιμής Μπουλ. | TRUE ή FALSE

#### 3.4.8. Η παράμετρος API του Script-Fu[5]

| Σημείωση
Εκτός από τους παραπάνω τύπους παραμέτρων, υπάρχουν περισσότεροι τύποι για την διαδραστική λειτουργία, καθένας από τους οποίους θα δημιουργήσει ένα γραφικό στοιχείο στο παράθυρο διαλόγου ελέγχου. Θα βρείτε έναν κατάλογο με αυτές τις παραμέτρους με περιγραφές και παραδείγματα στο σενάριο δοκιμής `plug-ins/script-fu/scripts/test-sphere-v3.scm` που συνοδεύει τον πηγαίο κώδικα του GIMP.

Τύπος παραμέτρων | Περιγραφή
--- | ---
`SF-ADJUSTMENT` | Δημιουργεί μια εφαρμογή ρύθμισης στο διάλογο. SF-ADJUSTMENT "ετικέτα" '(τιμή ελάχιστη μέγιστη αυξητικό_βήμα Αυξητική_σελίδα τύπος αριθμών) Λίστα ορισμάτων εφαρμογής
Στοιχείο | Περιγραφή
--- | ---
"ετικέτα" | Εκτυπωμένο κείμενο πριν την εφαρμογή.
τιμή | Εκτύπωση τιμής στην αρχή.
κατώτερη / ανώτερη | Η κατώτερη / ανώτερη τιμή (περιοχή επιλογής).
αυξητικό_βήμα | Τιμή αύξησης/μείωσης.
αύξηση_σελίδας | Τιμή αύξησης/μείωσης χρησιμοποιώντας το πλήκτρο σελίδας.
αριθμοί | Αριθμοί μετά την υποδιαστολή (δεκαδικό μέρος).
τύπος | Ένα από: SF-SLIDER ή 0, SF-SPINNER ή 1
`SF-COLOR` | Δημιουργία ενός χρωματιστού κουμπιού στο διάλογο. SF-COLOR "ετικέτα" '(κόκκινο πράσινο γαλάζιο) ή SF-COLOR "ετικέτα" "χρώμα" Λίστα ορισμάτων εφαρμογής
Στοιχείο | Περιγραφή
--- | ---
"ετικέτα" | Εκτυπωμένο κείμενο πριν την εφαρμογή.
'(κόκκινο πράσινο γαλάζιο) | Λίστα των τριών τιμών για κόκκινο, πράσινο και γαλάζιο συστατικό.
"χρώμα" | Όνομα χρώματος στη σημειογραφία CSS.
`SF-FONT` | Δημιουργεί μια εφαρμογή επιλογής γραμματοσειράς στο διάλογο. Επιστρέφει ένα όνομα γραμματοσειράς ως συμβολοσειρά. Υπάρχουν δύο νέες διαδικασίες κειμένου gimp για να διευκολύνουν τη χρήση της επιστρεφόμενης παραμέτρου: (gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font) (gimp-text-get-extents-fontname text size unit font) όπου γραμματοσειρά είναι το όνομα της γραμματοσειράς που παίρνετε. Το οριζόμενο μέγεθος στο όνομα της γραμματοσειράς αγνοείται σιωπηρά. Χρησιμοποιείται μόνο στον επιλογέα γραμματοσειράς. Έτσι σας ζητείται να το ορίσετε σε μια χρήσιμη τιμή (24 εικονοστοιχεία είναι μια καλή τιμή). SF-FONT "ετικέτα" "όνομα γραμματοσειράς" Λίστα ορισμάτων εφαρμογής
Στοιχείο | Περιγραφή
--- | ---
"ετικέτα" | Εκτυπωμένο κείμενο πριν την εφαρμογή.
"όνομα γραμματοσειράς" | Όνομα της προεπιλεγμένης γραμματοσειράς.
`SF-BRUSH` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή συνίσταται από την περιοχή προεπισκόπησης (που όταν πιέζεται θα παράξει μια αναδυόμενη προεπισκόπηση) και ένα κουμπί με την ετικέτα "...". Το κουμπί θα εμφανίσει ένα διάλογο όπου μπορούν να επιλεγούν πινέλα και καθένα από τα χαρακτηριστικά του πινέλου μπορεί να τροποποιηθεί. SF-BRUSH "πινέλο" '("Circle (03)" 100 44 0) Εδώ ο διάλογος πινέλου θα εμφανιστεί με ένα προεπιλεγμένο πινέλο κύκλου (03), αδιαφάνειας 100, διάκενου 44 και κανονικής κατάστασης βαφής (τιμή 0). Εάν αυτή η επιλογή παρέμεινε αμετάβλητη η τιμή που πέρασε στη συνάρτηση ως μία παράμετρος θα είναι '("Circle (03)" 100 44 0).
`SF-PATTERN` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή συνίσταται από την περιοχή προεπισκόπησης (που όταν πατηθεί θα παράξει την εμφάνιση προεπισκόπησης) και ένα κουμπί με την ετικέτα "...". Το κουμπί θα εμφανίσει ένα διάλογο όπου μπορούν να επιλεγούν μοτίβα. SF-PATTERN "Μοτίβο" "Φύλλα σφένδαμου" Η επιστρεφόμενη τιμή όταν το σενάριο καλείται είναι ένα αλφαριθμητικό που περιέχει το όνομα του μοτίβου. Εάν η πιο πάνω επιλογή δεν άλλαξε, το αλφαριθμητικό θα περιέχει "Φύλλα σφένδαμου".
`SF-GRADIENT` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή συνίσταται από ένα κουμπί που περιέχει μια προεπισκόπηση της επιλεγμένης διαβάθμισης. Εάν το κουμπί πατηθεί ένας διάλογος επιλογής διαβάθμισης θα εμφανιστεί. SF-GRADIENT "Διαβάθμιση" "Βαθύ θαλασσί" Η επιστρεφόμενη τιμή όταν το σενάριο καλείται είναι ένα αλφαριθμητικό που περιέχει το όνομα της διαβάθμισης. Εάν η πιο πάνω επιλογή δεν άλλαξε, το αλφαριθμητικό θα περιέχει "Βαθύ θαλασσί".
`SF-PALETTE` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή αποτελείται από ένα κουμπί που περιέχει το όνομα της επιλεγμένης παλέτας. Εάν το κουμπί πατηθεί ένας διάλογος επιλογής παλέτας θα εμφανιστεί. SF-PALETTE "Παλέτα" "Επώνυμα χρώματα" Η επιστρεφόμενη τιμή όταν καλείται το σενάριο είναι ένα αλφαριθμητικό που περιέχει το όνομα της παλέτας. Εάν η πιο πάνω επιλογή δεν άλλαξε, το αλφαριθμητικό θα περιέχει "Επώνυμα χρώματα".
`SF-FILENAME` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή αποτελείται από ένα κουμπί που περιέχει το όνομα του επιλεγμένου αρχείου. Εάν το κουμπί πατηθεί ένας διάλογος επιλογής αρχείου θα εμφανιστεί. SF-FILENAME "ετικέτα" (string-append ""gimp-data-directory"/scripts/beavis.jpg") Η επιστρεφόμενη τιμή, όταν το σενάριο καλείται είναι μια συμβολοσειρά που περιέχει το όνομα του αρχείου.
`SF-DIRNAME` | Χρήσιμο μόνο στη διαδραστική κατάσταση. Πολύ παρόμοιο με το SF-FILENAME, αλλά η δημιουργηθείσα εφαρμογή επιτρέπει την επιλογή ενός καταλόγου αντί για αρχείο. SF-DIRNAME "ετικέτα" "/var/tmp/images" Η επιστρεφόμενη τιμή, όταν το σενάριο καλείται είναι μια συμβολοσειρά που περιέχει το όνομα του καταλόγου.
`SF-OPTION` | Θα δημιουργήσει μια εφαρμογή στο διάλογο ελέγχου. Η εφαρμογή είναι ένα σύνθετο πλαίσιο που δείχνει τις επιλογές που πέρασαν ως λίστα. Η πρώτη επιλογή είναι η προκαθορισμένη επιλογή. SF-OPTION "ετικέτα" '("επιλογή1" "επιλογή2") Η επιστρεφόμενη τιμή, όταν το σενάριο που καλείται είναι ο αριθμός της επιλεγμένης επιλογής, όπου η πρώτη επιλογή αριθμείται ως 0.
`SF-ENUM` | Θα δημιουργήσει ένα γραφικό στοιχείο στον διάλογο ελέγχου. Το γραφικό στοιχείο είναι ένα σύνθετο πλαίσιο που δείχνει όλες τις απαριθμημένες τιμές για το δεδομένο τύπο απαρίθμησης. Αυτό πρέπει να είναι το όνομα της καταχωρισμένης απαρίθμησης, χωρίς το πρόθεμα "Gimp". Η δεύτερη παράμετρος καθορίζει την προεπιλεγμένη τιμή, χρησιμοποιώντας το ψευδώνυμο της τιμής απαρίθμησης. SF-ENUM "Παρεμβολή" '("Τύπος παρεμβολής" "γραμμικός") Η επιστρεφόμενη τιμή, όταν το σενάριο που καλείται αντιστοιχεί στην επιλεγμένη απαριθμημένη τιμή.

#### 3.4.9. Καταχώρηση της θέσης μενού

Αφού καταχωρήσουμε το σενάριό μας, πρέπει να πούμε στο GIMP πού πρέπει να βρίσκεται στο μενού.

Η καλύτερη θέση μενού του σεναρίου σας εξαρτάται από τη λειτουργία του. Τα περισσότερα σενάρια βρίσκονται στα μενού Φίλτρα και Χρώματα.

Για το τρέχον σενάριο, το οποίο δημιουργεί μια νέα εικόνα, επιλέγουμε ένα υπομενού από το Φίλτρα → Μάθημα. Αυτό κάνει η γραμμή με τη συνάρτηση `script-fu-menu-register`. Έτσι, καταχωρήσαμε το σενάριο πλαισίου κειμένου μας εδώ: Φίλτρα → Μάθημα → Πλαίσιο κειμένου.

Οποιοδήποτε υπομενού που καθορίζετε στο σενάριο σας και δεν υπάρχει ακόμη θα δημιουργηθεί αυτόματα από το GIMP.

[5] Αυτή η ενότητα δεν είναι μέρος του αρχικού μαθήματος.

3.3. Λίστες, λίστες και πάλι λίστες |  | 3.5. Προσθήκη πρόσθετης λειτουργικότητας

Report a bug in GIMP Αναφορά σφάλματος τεκμηρίωσης