• In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • Neuer Partner: AkkuShop.de
    Akkus, Ladegeräte und mehr (nicht nur) für Digitalkameras und Drohnen
  • Nicht erreichbare Adressen im Benutzerkonto
    Wir bekommen zurzeit eine große Anzahl an E-Mails, die das System zum Beispiel als Benachrichtigungen an Nutzer verschickt,
    als unzustellbar zurück, weil z.B. die Adressen nicht erreichbar sind oder das Postfach gar nicht existiert.
    Stellt doch bitte sicher, dass die Benachrichtigungen, die ihr vom System erwartet, auch zugestellt werden können.
    Nicht erreichbare E-Mail-Adressen sind dazu wenig hilfreich.
    Danke!
  • Stimmt ab über die Sieger des DSLR-Forum Fotowettbewerbs April 2025.
    Thema: "Plastik (Kunststoff)"

    Nur noch bis zum 30.04.2025 23:59!
    Jeder darf abstimmen!
    Zur Abstimmung und Bewertung hier lang
  • Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2025
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien und Schutzgläser der Eigenmarken
    "Upscreen", "Screenleaf", BROTECT" und "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Unlauterer Verkäufer wieder unterwegs!

    Liebe Mitglieder,
    Florian Franzek, der seit Jahren mit verschiedensten Usernamen in allen möglichen Foren und auf etlichen Verkaufsplattformen auftritt,
    ist wieder hier im Forum und versucht, ehrliche Käufer zu betrügen.
    Wir können wenig tun, außer bei Bekanntwerden einer weiteren Registrierung eines Accounts für seine Machenschaften, diese umgehend zu sperren.
    Ich empfehle, bei Kontakt umgehend die Polizei einzuschalten.

WERBUNG

@Schnebeck bezl. Rahmen FU

fraenky

Themenersteller
Hier ist das Beispiel.
Wenn Du den Auto-Rahmer von W. Greger kennen solltest (PS) dann so in dieser Art nur eben für Gimp :)

Rahmen sollte oben, rechts, links, unten Prozentual oder per Px einzustellen sein. Innerer Rahmen + Farbe Rahmen + Text/Schriftart/Größe
 
EDIT:

So ich stelle hier mal den aktuellen Stand des Scripts rein. Etwas länglich ;-)
Momentan eine absolute Alpha-Qualität und dient nur zum Rumspielen für die Ungeduldigen. Installationsanweisung im Script am Ende des Anfangskommentares.

Alles, was mit Text zu tun hat, geht noch nicht. Plausibilität der Werte wird ebenfalls vorausgesetzt.

Tester mögen mit dem Rahmenwerten und den Farben spielen und checken, ob die Idee mit dem Ratio praktikabel ist oder nicht. Prinzipielle Fehler bitte melden!

EDIT2:
Version 0.2 mit funktionierenden Textboxen. Einzig fehlende Operation ist das Erzeugen zusätzlichen Platzes für den Text.

Fragen:
- Soll der innere Rahmen eine eigene Farbwahl bekommen?
- Vertikale Ausrichtung der Texte notwendig?
- Taugt das Userinterface????

Änderungswünsche bitte jetzt anmelden!

Code:
; addadvborder.scm
; 0.2 (2004-08-13)
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;
; Fancy Freaky Fraenky Borders ;-)
;
; (C) 2004 by Thorsten Schnebeck (thorsten.schnebeck@gmx.net)
;
; copy this script to ~/.gimp/scripts/addadvborder.scm
; and in Gimp2: Xtns->Script-Fu->Refresh Scripts
; you will find this script in Script-Fu/Alchemy/Add Adv. Border...

(define (set_path direction width height)
; direction: 0=left 1=right 2=top 3=bottom
    (let* (
        (delta (/ height 2))
        (n_array (cons-array 33 'double)))
        (if (> height width) (set! delta (/ width 2)))
        (if (or (= direction 0) (= direction 2))
            (begin ;left or top
                (aset n_array 00 0.0)
                (aset n_array 01 0.0)
                (aset n_array 02 1.0)
    
                (aset n_array 03 0.0)
                (aset n_array 04 0.0)
                (aset n_array 05 2.0)
                            
                (aset n_array 06 delta)
                (aset n_array 07 delta)
                (aset n_array 08 2.0)
    
                (aset n_array 09 delta)
                (aset n_array 10 delta)
                (aset n_array 11 1.0)
                
                (aset n_array 12 delta)
                (aset n_array 13 delta)
                (aset n_array 14 2.0)
            )
            (begin ; right or bottom
                (aset n_array 00 (- width 1))
                (aset n_array 01 (- height 1))
                (aset n_array 02 1.0)
    
                (aset n_array 03 (- width 1))
                (aset n_array 04 (- height 1))
                (aset n_array 05 2.0)
                
                (aset n_array 06 (- width delta))
                (aset n_array 07 (- height delta))
                (aset n_array 08 2.0)
    
                (aset n_array 09 (- width delta))
                (aset n_array 10 (- height delta))
                (aset n_array 11 1.0)
                
                (aset n_array 12 (- width delta))
                (aset n_array 13 (- height delta))
                (aset n_array 14 2.0)
            )
        )
        (if (or (= direction 0) (= direction 3))
            (begin ;left or bottom
                (aset n_array 15 delta)
                (aset n_array 16 (- height delta))
                (aset n_array 17 2.0)
    
                (aset n_array 18 delta)
                (aset n_array 19 (- height delta))
                (aset n_array 20 1.0)
                
                (aset n_array 21 delta)
                (aset n_array 22 (- height delta))
                (aset n_array 23 2.0)
            
                (aset n_array 24 0.0)
                (aset n_array 25 (- height 1))
                (aset n_array 26 2.0)

                (aset n_array 27 0.0)
                (aset n_array 28 (- height 1))
                (aset n_array 29 1.0)
  
                (aset n_array 30 0.0)
                (aset n_array 31 (- height 1))
                (aset n_array 32 2.0)
            )
            (begin ;right or top
                (aset n_array 15 (- width delta))
                (aset n_array 16 delta)
                (aset n_array 17 2.0)
    
                (aset n_array 18 (- width delta))
                (aset n_array 19 delta)
                (aset n_array 20 1.0)
                
                (aset n_array 21 (- width delta))
                (aset n_array 22 delta)
                (aset n_array 23 2.0)
            
                (aset n_array 24 (- width 1))
                (aset n_array 25 0.0)
                (aset n_array 26 2.0)

                (aset n_array 27 (- width 1))
                (aset n_array 28 0.0)
                (aset n_array 29 1.0)
 
                (aset n_array 30 (- width 1))
                (aset n_array 31 0.0)
                (aset n_array 32 2.0)
            )
        )
    n_array)
)

(define (3d-border image pixel type)
    (let*
        (
            (height (car (gimp-image-height image)))
            (width (car (gimp-image-width image)))
            (col_left   30)
            (col_right  20)
            (col_top    40)
            (col_bottom 20)
        )
        (if (= type 0) 
            (begin
                (set! col_left   -30)
                (set! col_right  -10)
                (set! col_top    -20)
                (set! col_bottom -10)
            )
        )    
        (gimp-path-set-points image "leftbevel"   1 33 (set_path 0 width height))
        (gimp-path-set-points image "rightbevel"  1 33 (set_path 1 width height))
        (gimp-path-set-points image "topbevel"    1 33 (set_path 2 width height))
        (gimp-path-set-points image "bottombevel" 1 33 (set_path 3 width height))
        (gimp-selection-all image)
        (gimp-selection-shrink image pixel)
        (gimp-selection-invert image)
        (gimp-path-to-selection image "leftbevel" 3 1 1 1 1)
        (gimp-brightness-contrast (car (gimp-image-get-active-drawable image)) col_left 0)
        
        (gimp-selection-all image)
        (gimp-selection-shrink image pixel)
        (gimp-selection-invert image)
        (gimp-path-to-selection image "topbevel" 3 1 1 1 1)
        (gimp-brightness-contrast (car (gimp-image-get-active-drawable image)) col_top 0)
        
        (gimp-selection-all image)
        (gimp-selection-shrink image pixel)
        (gimp-selection-invert image)
        (gimp-path-to-selection image "rightbevel" 3 1 1 1 1)
        (gimp-brightness-contrast (car (gimp-image-get-active-drawable image)) col_right 0)
        
        (gimp-selection-all image)
        (gimp-selection-shrink image pixel)
        (gimp-selection-invert image)
        (gimp-path-to-selection image "bottombevel" 3 1 1 1 1)
        (gimp-brightness-contrast (car (gimp-image-get-active-drawable image)) col_bottom 0)
        (gimp-selection-clear image)
        (gimp-path-delete image "leftbevel")
        (gimp-path-delete image "rightbevel")
        (gimp-path-delete image "topbevel")
        (gimp-path-delete image "bottombevel")
        (gimp-image-flatten image)
    )
)
;from script-fu-beveled-pattern-fixedbutton:
(define (text-width extents)
    (car extents))

(define (text-height extents)
    (cadr extents))

(define (text-ascent extents)
    (caddr extents))

(define (script-fu-add-adv-border image drawable text1 fs1 text2 fs2 text3 fs3 position font ftcolor bcolor fcolor pxborder pxframe pxgap ratioi ratioo textspace)
    
    (let*
        (
            (restore (car (gimp-palette-get-foreground)))
            (height (car (gimp-image-height image)))
            (width (car (gimp-image-width image)))
            (pxshadow (+ (/ (* height (/ width height)) 400) 1))
            (ax (- (* pxgap ratioi) pxshadow))
            (ay (- pxgap pxshadow))
            (bx (- (* pxborder ratioo) (+ (+ (* 2 pxshadow) ax) pxframe))) ; negativ prÃ?fen!
            (by (- pxborder (+ (+ (* 2 pxshadow) ay) pxframe))) ;negativ prÃ?fen
            (text-extents (gimp-text-get-extents-fontname text1 fs1 1 font))
            (tx1width (text-width text-extents))
            (tx1height (text-height text-extents))
            (tx1ascent (text-ascent text-extents))
            (text-extents (gimp-text-get-extents-fontname text2 fs2 1 font))
            (tx2width (text-width text-extents))
            (tx2height (text-height text-extents))
            (tx2ascent (text-ascent text-extents))
            (text-extents (gimp-text-get-extents-fontname text3 fs3 1 font))
            (tx3width (text-width text-extents))
            (tx3height (text-height text-extents))
            (tx3ascent (text-ascent text-extents))
        )
    
;        (gimp-image-undo-group-start image)
        (3d-border image pxshadow 0)
        (script-fu-addborder image (car (gimp-image-get-active-drawable image)) ax ay bcolor 1)
        (gimp-image-flatten image)

        (script-fu-addborder image (car (gimp-image-get-active-drawable image)) pxshadow pxshadow fcolor 1)
        (gimp-image-flatten image)
        (3d-border image pxshadow 0)
        
        (script-fu-addborder image (car (gimp-image-get-active-drawable image)) pxframe pxframe fcolor 1)
        (gimp-image-flatten image)
        
        (script-fu-addborder image (car (gimp-image-get-active-drawable image)) pxshadow pxshadow fcolor 1)
        (gimp-image-flatten image)
        (3d-border image pxshadow 0)
        (script-fu-addborder image (car (gimp-image-get-active-drawable image)) bx by bcolor 1)
        (gimp-image-flatten image)

        ; text handling
        (set! height (car (gimp-image-height image)))
        (set! width (car (gimp-image-width image)))
        (set! txpos (- height (/ by 2))) ;bottom baseline !!by bei Erweiterung anpassen!!
        (if (= position 1) (set! txpos (/ by 2)))
        (set! txdisplace tx1ascent)
        (if (> tx2ascent txdisplace) (set! txdisplace tx2ascent))
        (if (> tx3ascent txdisplace) (set! txdisplace tx3ascent))
        (set! txpos (+ txpos (/ txdisplace 2))) ; Zentrieren im freien Bereich
        
        ; text color
        (gimp-palette-set-foreground ftcolor)
        ; left text
        (gimp-floating-sel-anchor (car (gimp-text-fontname image (car (gimp-image-get-active-drawable image)) bx (- txpos tx1ascent) text1 -1 TRUE fs1 1 font)))
        ; centred text
        (gimp-floating-sel-anchor (car (gimp-text-fontname image (car (gimp-image-get-active-drawable image)) (- (/ width 2) (/ tx2width 2)) (- txpos tx2ascent) text2 -1 TRUE fs2 1 font)))
        ; right text
        (gimp-floating-sel-anchor (car (gimp-text-fontname image (car (gimp-image-get-active-drawable image)) (- (- width bx) tx3width) (- txpos tx3ascent) text3 -1 TRUE fs3 1 font)))
    
        (gimp-palette-set-foreground restore)
    ; Flush the display

;        (gimp-image-undo-group-end image)

        (gimp-displays-flush)
    )
)

(script-fu-register "script-fu-add-adv-border" 
"<Image>/Script-Fu/Decor/Add Adv. Border..."
"Adv. Border"
"Thorsten Schnebeck"
"Thorsten Schnebeck (thorsten.schnebeck@gmx.net)"
"2004"
"*"
    SF-IMAGE         "Image"                        0
    SF-DRAWABLE      "Drawable"                     0
    SF-STRING        "Text (left)"                  ""
    SF-ADJUSTMENT    "Font Size"                    '(20 8 100 1 10 0 1)
    SF-STRING        "Text (center)"                ""
    SF-ADJUSTMENT    "Font Size"                    '(36 8 100 1 10 0 1)
    SF-STRING        "Text (right)"                 "(c) 2004"
    SF-ADJUSTMENT    "Font Size"                    '(14 8 100 1 10 0 1)
    SF-OPTION        "Text Position"                '("Bottom" "Top")
    SF-FONT          "Font"                         "Arial"
    SF-COLOR         "Font Color"                   '(255 255 255)
    SF-COLOR         "Border Color"                 '(000 000 000)
    SF-COLOR         "Frame Color"                  '(255 255 255)
    
    SF-ADJUSTMENT    "Border (px)"                  '(50 1 9000 1 10 0 0)
    SF-ADJUSTMENT    "Frame (px)"                   '(02 0 1000 1 10 0 0)
    SF-ADJUSTMENT    "Frame-Pic-Gap (px)"           '(20 0 9000 1 10 0 0)
    SF-ADJUSTMENT    "Inner Border H/V-Ratio"       '(1.0 0.1 10 0.1 1 1 1)
    SF-ADJUSTMENT    "Outer Border H/V-Ratio"       '(1.0 0.1 10 0.1 1 1 1)
    SF-ADJUSTMENT    "Additional Text Space (px)"   '(1 0 1000 1 10 0 1)
)
;Tab=4

Bye

Thorsten
 
Zuletzt bearbeitet:
Jepp so in etwa nur eben die einzelnen Seiten seperat einstellbar.
Somit kann man dann theoretisch irgendwann mal erweitern das man den Text auch auf allen Seiten plazieren kann :)

Übrigens... manchmal hat Englisch auch Vorteile ;-)

http://www.taiyaki.org/gimp/photo/

Verstehst Du das etwa nicht ? :D
 
äußere Rahmenfarbe
innere Rahmenfarbe
Rahmenweite innen h/v
innere Rahmenstärke (für alle)
Rahmenweite außen h/v

Textposition: oben unten (mit optionaler Rahmenerweiterung)
Ausrichtung: links, Mitte, rechts
Font
Fontgröße
Textfarbe
Text-Eingabefeld

Sind das nicht etwas viele Parameter? :eek:

Gruß

Thorsten
 
Noch ein paar Ideen:
Sollte das Gesamtbild einem festen Seitenverhältnissen (3:2/4:3) entsprechen? Macht Sinn, da die Belichter die Seitenverhältnisse unterstützen. Macht keinen Sinn bei Panoramen, die man aber nach dem Belichten eh beschneiden muss. Fürs Forum könnte man auch das Gesamtergebnis auf 900x600 bringen. Pixelangaben für den Rahmenanteil oder prozentual auf die Gesamtbildgröße?

In diesem Fall sind die Rahmenwerte abhängige Größen. Ich habe aber nicht die Möglichkeit per Skript abhängige Parametereingaben zu programmieren, das geht nur mit PlugIns.

GUIs sind schon schwierig ;-)

Bye

Thorsten
 
WAAAAAH das ist ja der Wahnsinn :) sowas gibts ja net mal für die Win PS User :D

Hehe das kann ich verstehen bezüglich der Paras....
Was ist denn das : Additional Text Space ? Outer Boarder und Inner Boarder H/V Ratio ?

Mit Text links und rechts meinte ich was anderes aber das was Du meinst ist auch klasse.
Ich meinte das man den Text um 90° dreht und dann eben links im Rahmen hat oder ihn rechts in den Rahmen integriert. Ist aber nicht sooo wichtig, wäre nur das Perfekte Tool.

Kannst Du das nicht Pixelbezogen machen so ist das egal welches Format das Bild hat.

linker Rahmen = 50 Px
rechter Rahmen = 50 Px
oberer Rahmen = 50 Px
unterer Rahmen = 100 Px

gut schwierig wirds dann mit dem innen Rahmen da dieser ja an die anderen sich anpasst, oder Du trennst die in 2 innere Rahmen (natürlich nicht im Gui)
Also praktisch so: Beispiel
Eingabe innerer Rahmen abstand zum äusseren Rahmen in Px: 5
Breite innerer Rahmen: 2 Px
somit wäre dann die Folge oben, recht, links der Rahmen bei Px 43 - 44
Unten bei Px 93 - 94

Falls die Eingaben so sind wie oben
 
Na ja, ich hatte mir das so gedacht (bzg. auf dein Bild oben):

Border ist der schwarze Rahmen,
Frame ist der weiße Kasten
Somit gibt man die beiden Werte für den inneren und äußeren schwarzen Rahmen an und die Breite des Kastens - meinetwegen auch in Pixel.
Da Rahmen üblicherweise horizontal und vertikal symmetrisch sind, gelten alle Stecken für alle vier Richtungen.
Will man nun aber oben/unten mehr Rahmen haben als links/rechts, kann man das mit dem Seitenverhältnis (Ratio) einstellen, einmal für den inneren oder für den äußeren schwarzen Rahmen. Der weiße Rahmen passt sich dazwischen automatisch an.
Will man nun zusätzlich in der Richtung, wo der Text hinkommt (momentan sind oben/unten als Wahl vorgesehen) noch etwas mehr Platz haben, kann man das mit dem letzten Parameter einstellen.

Warum "Breite - v/h Ratio" und nicht "Breite horiz - Breite vert"?
Nun, ich glaube, man wird meistens eine symmetrische Einstellung haben wollen und braucht dann nur einen Wert zu ändern, da Ratio auf 1 bleibt. Bei der zweiten Möglichkeit muss ich immer Wertepaare eingeben bzw. anpassen.

Kommentare, Vorschläge, Waschmaschinen?

Bye

Thorsten


P.S. Ich schlage mich jetzt erstmal mit generischen Rahmen rum, die dann mit diesen Parametern gefüttert werden können.
 
So, ich habe oben im 2. Beitrag des Threads eine Spielversion (V0.1) reingestellt. Auch in Zukunft, packe ich Versionen da oben hin. Es geht noch nicht viel, vieles geht noch nicht richtig aber einiges funktioniert tatsächlich ;-)

Have fun

Thorsten
 
Fancy Freaky Fraenky Borders ;-)
:D

Oki habs mal probiert und stelle folgendes fest:

Die Funktion Inner Border H/V bewirkt das der innere Rahmen weiter weg von innen aus wandert. Aber nur links und rechts.
Siehe Bild 1

Die Funktion Outer Border H/V bewirkt das der Aussen Rahmen breiter wird. Also 2.0 bedeutet er verdoppelt sich. Aber nur links und rechts
Siehe Bild 2

Nur wie bekomme ich den nur oben und unten dicker ?
Respektive was nutzt die Funktion Inner Border denn ? Braucht die jemand ?
Ist es nicht sinnvoller hier strikt zwischen top/bottom left/right "nur Outer Border" zu trennen ?
So hat man den im Bild schwarzen Rahmen entweder oben/unten größer oder links/rechts

Benötigen tut man das ja eh meistens nur für den Textinhalt da es halt besser ausschaut wenn da der Rahmen dicker ist wie die anderen Seiten.

Ansonsten spitze für ne Alpha !!!

Danke Thorsten......hoffe das die Beta bald erscheint :) vorallem mit Textfunktion
 
fraenky schrieb:
Die Funktion Inner Border H/V bewirkt das der innere Rahmen weiter weg von innen aus wandert. Aber nur links und rechts.
Siehe Bild 1

Die Funktion Outer Border H/V bewirkt das der Aussen Rahmen breiter wird. Also 2.0 bedeutet er verdoppelt sich. Aber nur links und rechts
Siehe Bild 2

Nur wie bekomme ich den nur oben und unten dicker ?
:-)
Es gibt auch Zahlen kleiner 1 ;-) H/V=0,5 <-> V=2*H
Generell stellt man die vertikale Rahmenstärke ein. Die horizontale Rahmenstärke folgt gemäß H/V.
Also:
Border=60, Outer Ratio=0.5 -> Rahmenstärken x=30 y=60

Respektive was nutzt die Funktion Inner Border denn ? Braucht die jemand ?
Ist es nicht sinnvoller hier strikt zwischen top/bottom left/right "nur Outer Border" zu trennen ?
So hat man den im Bild schwarzen Rahmen entweder oben/unten größer oder links/rechts

Warum Seitenverhältnis für innen und aussen - nun ja macht dann Sinn, wenn der äußere Rahmen quasi nicht exisitiert. Kann aber meinetwegen rausgenommen werden.

Benötigen tut man das ja eh meistens nur für den Textinhalt da es halt besser ausschaut wenn da der Rahmen dicker ist wie die anderen Seiten.

Ansonsten spitze für ne Alpha !!!

Ja, das einseitige Dickermachen ist auch noch nicht fertig, ist nicht schwierig aber etwas lästig. Generell arbeiten alle Gimp-Rahmenbefehle mit x,y-Werten. Dass man alle 4 Rahmenbreiten einstellen kann ist nicht vorgesehen. Somit ist auch mein Skript symmetrisch. Als Userinterface steht zur Auswahl
x und y paarweise verstellen oder
Rahmenstärke und Seitenverhältnis.

Danke Thorsten......hoffe das die Beta bald erscheint :) vorallem mit Textfunktion

Bitte, V0.2 (immer noch Alpha ;-) ist oben.

Bye

Thorsten
 
Schriften funzen hervorragend :)

getestet: verschiedene Fonts, verschiedene Sizes, bottom, top sowie Farbe

Klasse :)
 
So, da die Tests recht zufriedenstellend waren, gibt es V0.3 als Release unter
https://www.dslr-forum.de/showthread.php?t=12531

Ich hab einen neuen Thread aufgemacht, da die Überschrift hier nicht plakativ genug ist, um z.B. bei einer Suche gefunden zu werden.
Wir könnten eigentlich den Thread hier dicht machen ;-)

Ich hab die GUI noch mal etwas geändert und ich hoffe, sie ist einfach _und_ leistungsstark.

Bye

Thorsten
 
WERBUNG
Zurück
Oben Unten