Wilt u stoppen en even een pauze nemen? Nee? Akkoord, laten we doorgaan met uw vierde les — uw eerste script in Script-Fu.
Een van de meest voorkomende bewerkingen die ik uitvoer in GIMP is het maken van een vak met wat tekst erin voor een webpagina, een logo of wat dan ook. U weet echter meestal niet precies hoe groot de initiële afbeelding te maken als u begint. U weet niet hoeveel ruimte de tekst zal vullen met het lettertype en de grootte die u wilt.
Dat probleem kan worden opgelost met geautomatiseerd met Script-Fu.
We zullen daarom een script maken, genaamd Text Box, dat een op de juiste grootte gemaakt afbeelding maakt om soepel te passen rondom een regel tekst die de gebruiker invoert. We zullen ook de gebruiker het lettertype, de grootte van het lettertype en de tekstkleur laten kiezen.
Tot nu hebben we gewerkt in de Script-Fu Console. We gaan nu echter overschakelen naar het bewerken van bestanden met scripts. Bestanden met scripts zouden platte tekstbestanden moeten zijn die u kunt bewerken in een tekstbewerker. De naam die u geeft is niet zo belangrijk, behalve om het script te kunnen herkennen. U zou uw script de extensie “.scm” moeten geven.
Waar u uw scripts plaatst is een kwestie van voorkeur. In GIMP's voorkeuren Mappen kunt u zien in welke mappen GIMP zoekt naar scripts. Het is ook mogelijk om daar een nieuwe map toe te voegen. De map waar GIMP zijn eigen scripts opslaat is gewoonlijk niet de beste keuze voor uw scripts, maar voor de rest kunt u uitkiezen wat u wilt.
Elk script voor Script-Fu definieert ten minste een functie, wat de hoofdfunctie van het script is. Dat is waar u het werk doet.
Elk script moet zich ook registreren bij de procedurele database, zodat u er toegang toe heeft binnen GIMP.
We zullen eerst de hoofdfunctie definiëren:
(define (script-fu-text-box inText inFont inFontSize inTextColor))
Hier hebben we een nieuwe functie gedefinieerd, genaamd script-fu-text-box
die vier parameters neemt, die later zullen corresponderen met enige tekst, een lettertype, de grootte van het lettertype en de kleur van de tekst. De functie is momenteel leeg en doet dus niets. Zover gaat alles goed — niets nieuws, niets vreemds.
De conventies voor het geven van namen in Scheme lijken een voorkeur te hebben voor kleine letters met afbreekstreepjes, die ik heb gevolgd bij het geven van een naam aan de functie. Ik ben echter van de conventie afgeweken voor wat betreft de parameters. Ik hou meer van beschrijvende namen voor mijn parameters en variabelen en dus voeg in het voorvoegsel "in" toe aan de parameters, zodat ik snel kan zien dat zij waarden zijn die worden ingevoegd in het script, in plaats van er binnen gemaakt worden. Ik gebruik het voorvoegsel "the" voor variabelen die binnen het script worden gedefinieerd.
Het is een conventie van GIMP om uw functies voor scripts script-fu-abc
te noemen, omdat, als zij worden vermeld in de procedurele database, zij allemaal staan onder Script-Fu als u de functies vermeld. Dat helpt ook om ze te onderscheiden van plug-ins.
Dan, laten we de functie registreren bij GIMP. Dat wordt gedaan door de functie script-fu-register
. Als GIMP in een script leest, zal het die functie uitvoeren, die het script registreert in de procedurele database. U kunt deze aanroep naar de functie plaatsen waar u wilt in uw script, maar ik plaats het gewoonlijk aan het einde, na al mijn andere code.
Hier is de code voor het registreren van deze functie (ik zal al deze parameters later uitleggen):
(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>/File/Create/Text")
Sla deze functies op in een tekstbestand met het achtervoegsel .scm
in uw map voor scripts, en herstart dan GIMP. Het nieuwe script zal verschijnen als → → → .
Als u dit nieuwe script activeert, zal het niets doen, natuurlijk, maar u kunt de vragen zien die u hebt gemaakt bij het registreren van het script (meer informatie over wat we deden wordt hierna behandeld).
Tenslotte, als u de Procedureverkenner (
→ ) activeert, zult u merken dat ons script nu in de database verschijnt.Voor het registreren van ons script bij GIMP, roepen we de functie script-fu-register
aan, vullen de zeven vereiste parameters in en voegen de eigen parameters van ons script toe, samen met een beschrijving en een standaard waarde voor elke parameter.
De vereiste parameters
De naam van de functie die we hebben gedefinieerd. Dit is de functie die wordt aangeroepen als ons script wordt geactiveerd (het invoerpunt voor ons script). Dit is noodzakelijk omdat we aanvullende functies in hetzelfde bestand zouden kunnen definiëren en GIMP moet weten welk van deze functies aan te roepen. In ons voorbeeld hebben we slechts een functie gedefinieerd, tekst-vak, die we hebben geregistreerd.
Het menulabel is de naam die in het menu zal worden weergegeven. Voor het specificeren van de locatie, bekijk Paragraaf 3.4.9, “Registreren van de locatie in het menu”.
Een beschrijving van uw script, om te worden weergegeven in de Procedureverkenner.
Uw naam (de auteur van het script).
Auteursrecht informatie.
De datum waarop het script werd gemaakt, of de laatste revisie van het script.
De typen afbeeldingen waar het script op werkt. Dit zou een van de volgende mogen zijn: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Of het hoeft helemaal niets te zijn — in ons geval, we maken een afbeelding, en dus hoeven we niet het type afbeelding te definiëren waarmee we werken.
Als we eenmaal de vereiste parameters hebben vermeld, moeten we vervolgens de parameters vermelden die corresponderen met de parameters die ons script nodig heeft. Wanneer we de parameters vermelden, geven we hints over wat hun typen zijn. Dat is voor het dialoogvenster dat naar voren komt als de gebruiker ons script selecteert. We verschaffen ook een standaard waarde.
Dit gedeelte van het proces voor registreren heeft de volgende indeling:
Type parameter |
Omschrijving |
Voorbeeld |
---|---|---|
|
Als uw script werkt op een geopende afbeelding, zou dit de eerste parameter moeten zijn na de vereiste parameters. GIMP zal een verwijzing doorgeven naar deze afbeelding in deze parameter. |
3 |
|
Als uw script werkt op een geopende afbeelding, zou dit de tweede parameter moeten zijn na de parameter |
17 |
|
Accepteert getallen en tekenreeksen. Onthoud dat aanhalingstekens moeten worden geëscapet voor standaard tekst, het is dus beter om |
42 |
|
Accepteert tekenreeksen. |
"Enige tekst" |
|
Geeft in deze parameter aan dat een kleur is vereist. |
'(0 102 255) |
|
Een keuzevak wordt weergegeven om een Booleaanse waarde te krijgen. |
TRUE of FALSE |
Opmerking | |
---|---|
Naast de hierboven vermelde typen parameters zijn er nog meer types voor de interactieve modus, elk van hen zal een widget maken in het dialoogvenster besturingselement. U kunt een lijst met deze parameters met beschrijvingen en voorbeelden vinden in het testscript |
Type parameter |
Omschrijving |
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Maakt een widget Aanpassen in het dialoogvenster. SF-ADJUSTMENT "label" '(value lower upper step_inc page_inc digits type) Lijst met argumenten voor widget
|
||||||||||||||||
|
Maakt een knop voor een kleur in het dialoogvenster. SF-COLOR "label" '(red green blue) of SF-COLOR "label" "color" Lijst met argumenten voor widget
|
||||||||||||||||
|
Maakt een nieuw widget voor selecteren van een lettertype in het dialoogvenster. Het geeft de naam van een lettertype terug als een tekenreeks. Er zijn twee nieuwe procedures van gimp-text om het gebruiken van deze teruggegeven parameter te vergemakkelijken: (gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font) (gimp-text-get-extents-fontname text size unit font) waar font de naam van het lettertype is die u krijgt. De grootte die is gespecificeerd in de naam van het lettertype wordt stilletjes genegeerd. Het wordt alleen gebruikt voor de selectie van het lettertype. U zult dus worden gevraagd een nuttige waarde in te voeren (24 pixels is een goede keuze). SF-FONT "label" "fontname" Lijst met argumenten voor widget
|
||||||||||||||||
|
Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een voorbeeldgebied (dat, als erop wordt geklikt, een pop-upvoorbeeld zal maken) en een knop met het label "…". De knop zal een dialoogvenster naar voren brengen waar penselen kunnen worden geselecteerd en elk van de eigenschappen van het penseel kan worden aangepast. SF-BRUSH "Brush" '("Circle (03)" 100 44 0) Hier wordt het dialoogvenster penseel gemaakt, met een standaard penseel Circle (03) dekking 100 tussenruimte 44 en tekenmodus Normaal (value 0). Als deze selectie niet zou worden gewijzigd, zou de aan de functie doorgegeven waarde, als een parameter, zijn '("Circle (03)" 100 44 0). |
||||||||||||||||
|
Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een voorbeeldgebied (dat, als erop wordt geklikt, een pop-upvoorbeeld zal maken) en een knop met het label "…". De knop zal een dialoogvenster naar voren brengen waar patronen kunnen worden geselecteerd. SF-PATTERN "Pattern" "Maple Leaves" De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van het patroon bevat. Als de bovenstaande selectie niet werd gewijzigd zou de tekenreeks "Maple Leaves" bevatten. |
||||||||||||||||
|
Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een knop die een voorbeeld van het geselecteerde kleurverloop bevat. Als de knop wordt ingedrukt zal een dialoogvenster voor het selecteren van een kleurverloop worden weergegeven. SF-GRADIENT "Gradient" "Deep Sea" De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van het kleurverloop bevat. Als de bovenstaande selectie niet werd gewijzigd zou de tekenreeks "Deep Sea" bevatten. |
||||||||||||||||
|
Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een knop die een voorbeeld van het geselecteerde palet bevat. Als de knop wordt ingedrukt zal een dialoogvenster voor het selecteren van een palet worden weergegeven. SF-PALETTE "Palette" "Named Colors" De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van het palet bevat. Als de bovenstaande selectie niet werd gewijzigd zou de tekenreeks "Named Colors" bevatten. |
||||||||||||||||
|
Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een knop die een vak voor de naam van een bestand bevat. Als de knop wordt ingedrukt zal een dialoogvenster voor het selecteren van een bestand worden weergegeven. SF-FILENAME "label" (string-append "" gimp-data-directory "/scripts/beavis.jpg") De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van het bestand bevat. |
||||||||||||||||
|
Alleen nuttig in interactieve modus. Lijkt heel veel op SF-FILENAME, maar de gemaakte widget maakt het mogelijk een map te selecteren in plaats van een bestand. SF-DIRNAME "label" "/var/tmp/images" De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van de map bevat. |
||||||||||||||||
|
Het zal een widget maken in het dialoogvenster besturingselement. De widget is een combinatievak dat de opties weergeeft die doorgegeven kunnen worden, als een lijst. De eerste optie is de standaard keuze. SF-OPTION "label" '("option1" "option2") De teruggegeven waarde als het script wordt uitgevoerd is het nummer van de gekozen optie, waarbij de eerste optie als 0 wordt geteld. |
||||||||||||||||
|
Het zal een widget maken in het dialoogvenster besturingselement. De widget is een combinatievak dat alle genummerde waarden opgeeft voor het betreffende type enum. Dit moet de naam zijn van een geregistreerde enum, zonder het voorvoegsel "Gimp". De tweede parameter specificeert de standaard waarde, met de bijnaam van de waarde van de enum. SF-ENUM "Interpolation" '("InterpolationType" "linear") De teruggegeven waarde als het script wordt uitgevoerd correspondeert met de gekozen waarde voor enum. |
Als we ons script eenmaal hebben geregistreerd, moeten we GIMP vertellen waar het te vinden is in het menu.
De beste locatie in het menu voor uw script is afhankelijk van zijn functie. De meeste scripts zijn te vinden in de menu's
en .Voor het huidige script, dat een nieuwe afbeelding maakt, kiezen we voor een submenu van script-fu-menu-register
doet. Dus, we registreerden ons script Text Box hier: → → → .
Zoals u al opmerkte, het submenu Tekst in het menu
→ was er nog niet toen we begonnen — GIMP maakt automatisch menu's als die nog niet bestaan.