Forum Wiki Galerie Kontakt Wie man Fragen richtig stellt. Tutorial Forum
Zurück   GIMP-Forum 3.0 > Arbeiten mit Gimp > GIMP-Ressourcen > Skripte

Hinweise
Alt 28.11.2006, 21:02   #1
flashnfantasy
Erfahrener Benutzer
 
Benutzerbild von flashnfantasy
 
Registriert seit: 14.05.2004
Beiträge: 380
Standard [Script-Fu]Text einpassen in Auswahl

Oh man, jetzt merke ich erst, wie schwer Scheme ist, wenn man mal einige Zeit nichts damit zu tun hatte, aber diesen Script habe ich wirklich gebraucht

Die Idee ist, daß man eine Stelle im Bild selektiert und diesen Script aufruft.
Man wählt eine Schriftart und einen Text und der Script passt den Text in der Auswahl ein. Das heißt, der Script passt die Größe der Schrift und die Position der Auswahl an.

Nächste Besonderheit ist, daß man die Schrift auf die Auswahl beschränken kann. Vergleiche dazu die beiden Bilder unten.
Dazu den Haken bei Limit Effekt to Selection setzen.




Eine weitere Option ist das Rotieren des Textes um -90 Grad. Das muß erstmal reichen, was das Rotieren angeht, wer in die andere Richtung rotieren will, der muß halt das Bild drehen.

Jetzt kommen noch ein paar Effekte für GIFs (sind noch wenige, ich hoffe ihr habt Wünsche...).

Die Effekte sind bisher nicht für zyklische Banner gedacht, aber solche Effekte wären kein Problem. Diese Effekte sollten nur einmal ablaufen, wenn das Banner das erstemal erscheint.
Besonders der Effekt, in dem Schrift anscheinend vom Beobachter zum Bild kommt hat mich interessiert, das kennt man so aus vielen Filmen.
Wenn man diesen Effekt mit der Beschränkung auf die Auswahl kombiniert, dann kriegt man zudem ziemlich kleine GIFs (na relativ klein...)

Code:
(script-fu-register "script-fu-banner01"
                    _"<Image>/Script-Fu/Banner/Text01"
                    "place text in selected area"
                    "Mathias"
                    "Mathias"
                    "24/11/06"
                    ""
                    SF-IMAGE "Image" 0
                    SF-DRAWABLE "Drawable" 0
                    SF-STRING     _"Text" "The Gimp"
                    SF-FONT       _"Font" "Tahoma Bold"
                    SF-OPTION     _"Align" '(_"Top Left"
                                             _"Center"
                                             _"Center Left"
                                             _"Center Right"
                                             )
                    SF-TOGGLE     _"Rotate left" FALSE
                    SF-OPTION     _"Effect" '(_"None"
                                             _"All Layers"
                                             _"Blur"
                                             _"Fade"
                                             _"Size In"
                                             )
                    SF-ADJUSTMENT _"Effect Speed" '(1 1 100 10 10 0 0)
                    SF-TOGGLE     _"Limit Effect to Selection" FALSE
)


(define (script-fu-banner01 inImage inLayer exampletext font align rotate option speed limit)

  ;(gimp-image-undo-disable inImage)
  (set! select-bounds (gimp-selection-bounds inImage))
  (set! has-selection (car select-bounds))
  ; x1 und y1 sind die Startkoordinaten
  ; x2 und y2 sind die Endkoordinaten
  (set! x1 (cadr select-bounds))
  (set! y1 (caddr select-bounds))
  (set! x2 (cadr (cddr select-bounds)))
  (set! y2 (caddr (cddr select-bounds)))
  (set! theWidth (car (gimp-image-width inImage)))
  (set! theHeight (car (gimp-image-height inImage)))
  (set! selX (- x2 x1))
  (set! selY (- y2 y1))
  (set! saveLayer (car (gimp-selection-save inImage)))

  (set! testf 100)
  (set! fontdim (gimp-text-get-extents-fontname exampletext testf 0 font))
  (set! fontdimXD (car fontdim))
  (set! fontdimYD (cadr fontdim))
  (set! fontdimX fontdimXD)
  (set! fontdimY fontdimYD)
  (if (= rotate 1)
  (begin
    (set! fontdimX fontdimYD)
    (set! fontdimY fontdimXD)
  ))
  (set! fa (min (/ selX fontdimX) (/ selY fontdimY)))
  (set! testf (* testf fa))
  (set! fontdimX (* fa fontdimX))
  (set! fontdimY (* fa fontdimY))

  (set! centerX (+ x1 (/ fontdimX 2)))
  (set! centerY (+ y1 (/ fontdimY 2)))

  (if (= rotate FALSE)
  (begin
    (if (= align 1)
    (begin
      (set! paddingH (max 0 (/ (- selX fontdimX) 2)))
      (set! paddingV (max 0 (/ (- selY fontdimY) 2)))
      (set! centerX (+ centerX paddingH))
      (set! centerY (+ centerY paddingV))
      (set! x1 (+ x1 paddingH))
      (set! y1 (+ y1 paddingV))
    ))
    (if (= align 2)
    (begin
      (set! paddingV (max 0 (/ (- selY fontdimY) 2)))
      (set! centerY (+ centerY paddingV))
      (set! y1 (+ y1 paddingV))
    ))
    (if (= align 3)
    (begin
      (set! paddingH (max 0 (- selX fontdimX)))
      (set! paddingV (max 0 (/ (- selY fontdimY) 2)))
      (set! centerX (+ centerX paddingH))
      (set! centerY (+ centerY paddingV))
      (set! x1 (+ x1 paddingH))
      (set! y1 (+ y1 paddingV))
    ))
  ))

  (if (= rotate TRUE)
  (begin
    (if (= align 0)
    (begin
      (set! centerX (+ x1 (/ fontdimY 2)))
      (set! centerY (+ y1 (/ fontdimY 2)))
    ))
    (if (= align 1)
    (begin
      (set! paddingH (/ (- selX fontdimY) 2))
      (set! paddingV (/ (- selY fontdimX) 2))
      (set! centerX (/ (+ x1 x2) 2))
      (set! centerY (/ (+ y1 y2) 2))
      (set! x1 (+ x1 paddingH))
      (set! y1 (+ y1 paddingV))
    ))
    (if (= align 2)
    (begin
      (set! paddingH (/ (- fontdimX fontdimY) 2))
      (set! paddingV (/ (- selY fontdimX) 2))
      (set! centerX (+ x1 (/ fontdimX 2)))
      (set! centerY (/ (+ y1 y2) 2))
      (set! x1 (+ x1 paddingH))
      (set! y1 (+ y1 paddingV))
    ))
    (if (= align 3)
    (begin
      (set! paddingH (- selX (/ fontdimX 2) (/ fontdimY 2)))
      (set! paddingV (/ (- selY fontdimX) 2))
      (set! centerX (- x2 (/ fontdimX 2)))
      (set! centerY (/ (+ y1 y2) 2))
      (set! x1 (+ x1 paddingH))
      (set! y1 (+ y1 paddingV))
    ))
  ))

  (set! layers (gimp-image-get-layers inImage))
  (set! layersC (car layers))

  (if (< 0 option)
  (begin
  (gimp-image-set-active-layer inImage (aref (cadr layers) 0))
  ))

  ;(set! exampletext (string-append exampletext " "))
  ;(set! exampletext (string-append exampletext (number->string fontdimX)))
  ;(set! exampletext (string-append exampletext " "))
  ;(set! exampletext (string-append exampletext (number->string fontdimY)))
  ;(set! exampletext (string-append exampletext ","))
  ;(set! exampletext (string-append exampletext (number->string x1)))
  ;(set! exampletext (string-append exampletext " "))
  ;(set! exampletext (string-append exampletext (number->string y1)))
  ;(set! exampletext (string-append exampletext ","))
  ;(set! exampletext (string-append exampletext (number->string paddingH)))
  ;(set! exampletext (string-append exampletext " "))
  ;(set! exampletext (string-append exampletext (number->string paddingV)))
  ;(set! exampletext (string-append exampletext " "))
  ;(set! exampletext (string-append exampletext (number->string layersC)))

  (set! textlayer (car (gimp-text-fontname inImage -1 x1 y1 exampletext 0 TRUE testf 0 font)))

  (if (= rotate TRUE)
    (gimp-drawable-transform-rotate textlayer 4.7 0 centerX centerY 0 2 1 5 0)
  )


  (if (< 0 option)
  (begin

    ; Auf alle Layer aufbringen
    (gimp-layer-resize-to-image-size textlayer)
    ;(gimp-image-raise-layer-to-top inImage textlayer)

    (set! eff (/ (* speed (max theWidth theHeight)) 100))

    (set! index layersC)
    (while (< 0 index)
      (set! a (car (gimp-layer-copy textlayer TRUE)))
      (gimp-image-add-layer inImage a 0)
      (set! indexL 0)
      (while (< indexL index)
        (gimp-image-lower-layer inImage a)
        (set! indexL (+ indexL 1))
      )
      ; Hier kommen die Operationen

      (set! fsoft (* eff (- index 1)))
      (set! opac 100)
      (if (< 1 layersC)
        (set! opac (* 100 (/ (- layersC index) (- layersC 1))))
      )

      (if (= 2 option)
      (begin
        (if (< 0 fsoft)
          (plug-in-gauss-iir2 1 inImage a fsoft fsoft)
        )
      ))

      (if (= 3 option)
      (begin
        (gimp-layer-set-opacity a opac)
      ))

      (if (= 4 option)
      (begin
        (set! offs (* eff (- index 1)))
        (set! dx (- (/ theWidth 2) centerX))
        (set! dy (- (/ theHeight 2) centerY))
        (set! xFactor (- (/ (+ theWidth offs) theWidth) 1))
        (set! yFactor (- (/ (+ theHeight offs) theHeight) 1))
        (set! mx (* dx xFactor))
        (set! my (* dy yFactor))

        (gimp-layer-scale a (+ theWidth offs) (+ theHeight offs) 1)

        (gimp-drawable-offset a FALSE 1 mx my)
        (gimp-layer-set-opacity a opac)
      ))

      (if (= limit TRUE)
      (begin
        (gimp-selection-load saveLayer)
        (gimp-selection-invert inImage)
        (gimp-edit-clear a)
        (gimp-selection-none inImage)
      ))

      (gimp-image-merge-down inImage a 0)
      (set! index (- index 1))
    )
    (gimp-image-remove-layer inImage textlayer)
  ))

  (if (and (= limit TRUE) (= option 0))
  (begin
    (gimp-selection-load saveLayer)
    (gimp-selection-invert inImage)
    (gimp-edit-clear textlayer)
    (gimp-selection-none inImage)
  ))

  ;(gimp-image-undo-enable inImage)
  ;(gimp-image-clean-all inImage)
  (gimp-displays-flush)
)
__________________
meine Website
flashnfantasy ist offline   Mit Zitat antworten
 

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:12 Uhr.


Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.