3.5. Aanvullende functionaliteit toevoegen

Laten we doorgaan met onze training en nog wat functionaliteit aan ons script toevoegen.

3.5.1. Een nieuwe afbeelding maken

In de vorige les maakten we een lege functie en registreerden die bij GIMP. In deze les willen we functionaliteit verschaffen aan ons script — we willen een nieuwe afbeelding maken, de tekst van de gebruiker er aan toevoegen en de grootte van de afbeelding aanpassen, zodat de tekst exact past.

Nu u eenmaal weet hoe variabelen in te stellen, functies te definiëren en toegang te krijgen tot leden van lijsten, is de rest allemaal heuvelaf — alles wat u hoeft te doen is uzelf thuis te laten worden in de beschikbare functies in de procedurele database van GIMP en die functies direct aan te roepen. Open de Paragraaf 12.9, “De procedureverkenner”.

Laten we beginnen met het maken van een nieuwe afbeelding. We zullen een nieuwe variabele maken, theImage, ingesteld op het resultaat voor het aanroepen van de ingebouwde functie voor GIMP gimp-image-new.

Zoals u kunt zien in de Procedureverkenner, neemt de functie gimp-image-new drie — de breedte, hoogte en type van de afbeelding. Omdat we later de grootte van de afbeelding zullen wijzigen om de tekst te laten passen, zullen we een afbeelding RGB maken van 10×10 beeldpunten. We zullen ook de breedte en groottes in enkele variabelen opslaan, waar we later naar verwijzen en ze verwerken in het script.

        (define (script-fu-text-box inText inFont inFontSize inTextColor)
        (let*
              (
                 ; onze lokale variabelen definiëren
                 ; een nieuwe afbeelding maken:
                 (theImageWidth  10)
                 (theImageHeight 10)
                 (theImage (car
                                (gimp-image-new
                                 theImageWidth
                                 theImageHeight
                                 RGB
                                )
                           )
                 )
                 (theText)     ;een declaratie voor de tekst
                               ;die we later zullen maken
      

Opmerking: We gebruikten de waarde RGB om te specificeren dat de afbeelding een RGB-afbeelding is. We zouden ook 0 hebben kunnen gebruiken, maar RGB is meer beschrijvend als we in een oogopslag naar de code kijken.

Het zou u ook moeten opvallen dat we de kop van het resultaat van de functie namen. Dit zou een beetje vreemd kunnen lijken, omdat de database ons expliciet vertelt dat het slechts een waarde teruggeeft — de ID van de nieuw gemaakte afbeelding. Maar, alle functies van GIMP geven een lijst terug, zelfs als er maar een element in de lijst staat, dus moeten we de kop van de lijst hebben.

3.5.2. Een nieuwe laag toevoegen aan de afbeelding

Nu we een afbeelding hebben, moeten we daar een laag aan toevoegen. We zullen de functie gimp-layer-new aanroepen om de laag te maken, waarbij we de ID doorgeven van de afbeelding die we zojuist hebben gemaakt. (Vanaf nu, in plaats van de volledige functie te vermelden, zullen we alleen de regels vermelden die we er aan toevoegen. U kunt het volledige script hier bekijken.) Omdat we alle lokale variabelen hebben gedeclareerd die we gebruiken, zullen we ook de markering met haakjes aan het einde van de declaraties voor onze variabelen sluiten:

        ;maak een nieuwe laag voor de afbeelding:
           (theLayer
                     (car
                          (gimp-layer-new
                           theImage
                           theImageWidth
                           theImageHeight
                           RGB-IMAGE
                           "laag 1"
                           100
                           LAYER-MODE-NORMAL
                          )
                      )
            )
         ) ;einde van onze lokale variabelen
      

Als we eenmaal de nieuwe laag hebben, moeten we die toevoegen aan de afbeelding:

        (gimp-image-insert-layer theImage theLayer 0 0)
      

Nu, gewoon voor de lol, laten we eens kijken naar de vruchten van ons werk tot dit punt en deze regel toevoegen aan de nieuwe lege afbeelding:

(gimp-display-new theImage)

Sla uw werk op, herstart GIMP, voer het script uit en een nieuwe afbeelding zou naar voren moeten komen. Het zal waarschijnlijk bagger bevatten (willekeurige kleuren), omdat we het niet hebben verwijderd. We zullen dat zo doen.

3.5.3. De tekst toevoegen

Ga door en verwijder de regel om de afbeelding weer te geven (of maak er een opmerking van met een (;) als het eerste teken op de regel).

Voordat we tekst aan de afbeelding toevoegen, moeten we de kleuren voor de voor- en achtergrond instellen, zodat de tekst verschijnt in de kleur die de gebruiker heeft gespecificeerd. We zullen de functies gimp-context-set-back/foreground gebruiken:

        (gimp-context-set-background '(255 255 255) )
        (gimp-context-set-foreground inTextColor)
      

Met de juiste kleuren ingesteld, laten we nu de bagger, die momenteel in de afbeelding staat, opruimen door de tekenbare te vullen met de achtergrondkleur:

        (gimp-drawable-fill theLayer FILL-BACKGROUND)
      

Met de schoongemaakte afbeelding, zijn we gereed om enige tekst toe te voegen:

        (set! theText
                      (car
                           (gimp-text-font
                            theImage theLayer
                            0 0
                            inText
                            0
                            TRUE
                            inFontSize
                            inFont)
                       )
        )
      

Hoewel het een lange functie-aanroep is, is het behoorlijk rechtdoorzee als u door de parameters loopt terwijl u kijkt naar het item van de functie in de Procedureverkenner. In de basis maken we een nieuwe tekstlaag en wijzen die toe aan de variabele theText.

Nu we de tekst hebben, kunnen we de breedte en hoogte ervan grijpen en de afbeelding en de laag van de afbeelding op maat maken voor de grootte van de tekst:

        (set! theImageWidth   (car (gimp-drawable-get-width  theText) ) )
        (set! theImageHeight  (car (gimp-drawable-get-height theText) ) )

        (gimp-image-resize theImage theImageWidth theImageHeight 0 0)

        (gimp-layer-resize theLayer theImageWidth theImageHeight 0 0)
      

Als u net zo bent als ik, vraagt u zich waarschijnlijk af wat een tekenbare is, vergeleken met een laag. Het verschil tussen die twee is dat een tekenbare alles is waarop kan worden getekend, inclusief lagen, maar ook kanalen, laagmaskers, de selectie, etc.; een laag is een meer specifieke versie van een tekenbare. In de meeste gevallen, is het onderscheid niet van belang.

Met de afbeelding klaar om te gaan, kunnen we nu onze regel voor het weergeven ervan opnieuw toevoegen:

        (gimp-display-new theImage)
      

Sla uw werk op, herstart GIMP en voer uw eerste script uit!

3.5.4. De vlag Vies opruimen

Als u probeert om de gemaakte afbeelding te sluiten zonder eerst het bestand op te slaan, zal GIMP u vragen of u uw werk op wilt slaan, voordat u de afbeelding sluit. Het vraagt u dat omdat de afbeelding nog gemarkeerd is als vies, of niet opgeslagen. In het geval van ons script, is dit vervelend voor de keren dat we het eenvoudigweg uitvoeren om te testen en niets in de resulterende afbeelding toevoegen of wijzigen — dat is, ons werk is in een dergelijk eenvoudig script gemakkelijk te reproduceren, dus lijkt het zin te hebben om deze vlag Vies op te ruimen.

We kunnen, om dat te doen, de vlag Vies opruimen na het weergeven van de afbeelding:

        (gimp-image-clean-all theImage)
      

Dat zal het tellen van Vies op 0 zetten, wat het er laat uitzien als een schone afbeelding.

Of deze regel moet worden toegevoegd of niet is een kwestie van persoonlijke smaak. Ik gebruik het in scripts die nieuwe afbeeldingen produceren, waar de resultaten triviaal zijn, zoals in dit geval. Als uw script heel gecompliceerd is, of als het werkt op een bestaande afbeelding, zou u deze functie waarschijnlijk niet willen gebruiken.