Forum Wiki Galerie Kontakt Wie man Fragen richtig stellt. Tutorial Forum
Zurück   GIMP-Forum 3.0 > Allgemeines > OFF-Topic

Hinweise
Alt 28.08.2016, 14:48   #1
PeterPKHG
Erfahrener Benutzer
 
Registriert seit: 20.07.2016
Beiträge: 404
Standard Wissen ist Macht

Für Gimp-Animatoren nützliches Tutorial.

Hole Dir als erstes mein xcf und öffne es in Gimp oder:
http://pkhg.nl/picture/Tutorial_01.xcf
öffne Gimp und lade ein eigenes Bild mit mehreren Ebenen 'layern' (oder mache es schnell).
Die unterste Ebene ist unser 'Background', die Ebenen darüber sollen verschiedene (kleine) Bilder
verstreut über den Bildschirm (von Gimp) liegen. Bei meinem XCF ist das so!

Nun der Auftrag: Mache eine GIF Animation, wobei NUR der Background und mit jeweils EINEM der
kleinen Bilder mit einer Dauer von sage mal 1 sec zu sehen sind, eins nach dem anderen.

Dies hatte ich als Problem im Forum hier http://www.gimpforum.de/showthread.php?t=23110
gefragt und danach die Lösung selbst 'erinnert':

1. Man kopiere die Background-Ebene häufig genug und schiebe sie zwischen die Bilder!
2. Optimiere für GIF (und guck es Dir an!)
3. Die Namen der Ebenen sind nun so etwas wie "Deine Ebenen-Namen (100ms)(combine)" geworden,
nicht wahr?!
4. Jedes zweite (100ms) muss nun (1000ms) (oder was Du willst) werden.

Eine schreckliche Aufgabe wenn Du mehr als 3 oder 20 oder noch mehr kleine Bilder hast.
Einverstanden?

Es gibt nun mehrer Möglichkeiten:
1. Nein, überhaupt nicht tun, ist am einfachsten aber gibt eine 6 als Beurteilung .
2. Viel Zeit investieren und die benötigten Schritte mal am Bildschirm ausführen", Beurteilung: 4.
3. Die Python Konsole öffnen, den Text aus dem CODE (hier weiter unten) kopieren und in die Konsole
kleben und abwarten was es wird, Beurteilung: 3+
4. Alles selbst bedenken, und schrittweise in der Konsole mal tun, Beurteilung: 2
5. Ein PythonFu Plugin machen oder machen lassen und dann mal benutzen: Beurteilung: 1 .
6. Alles hier lesen aber nichts TUN: was gebt Ihr Euch selbst?
7. Erzählen ob dies Spass gemacht hat und Vergleichbares mehr anbieten?! Beurteilung 2
8. ...


Code:
#Mit Kommentaar vor jeder Zeile
#Alles was hinter einem #-Zeichen steht wird von Python überschlagen, als Kommentar aufgefasst
#Ausnahme IN einem Text, so etwas ist Text:   "die ist ein Text und das # ist KEIN Kommentar-Anfang"

#Dies komt alles in einen PythonFu-Konsole-von-Gimp!!!!


#Hole das LETZTE Bild, welches Du in Gimp geöffnet hast
image = gimp.image_list()[0]

#hier wird eine Funktion, die den untersten layer unter den layer nr kopiert, zur mehrfachen
#Benutzung "progammiert":

#Funktionen fangen immer mit "def" an, danach der Name der Funktion und danach
#die sogenannten Parameter der Funktion, womit die Funktion arbeiten soll
def schiebe_bg_unter(nr, image):
    #Ein image hat viele Eigenschaften in Gimp, hier sind alle layers dieses image gefragt!
    #und sind erreichbar über die Variable "alle_layers"  (selbt gewählter name)
    # ein = - Zeichen ist ein Anweisung um was rechts davon steht mit dem selbt-gwählten
    #Namen benutzen zu können
    alle_layers = image.layers
    
    #als Hintergrund (background auf Englisch) wird das unterste layer genommen 
    #alle_layers ist nach obigen Komando eine Liste von layers des Bildes "image"
    #mit [-1] holt man sich das LETZTE Element aus einer Liste
    background = alle_layers[-1]
    
    #Es wird eine Kopie erstellt , die 1 erzwingt, falls nötig, den Alphakanal (RGBA)
    bg_copy = pdb.gimp_layer_copy(background, 1)
    
    #Klebe hinten an den schon vorhandenen Namen ein Kennzeichen hier z.B "nr: nr" , das
    #zweite nr ist eine Zahl, die durch str in einen Text umgewandelt wird 
    # mit einem + - Zeichen werden Texte aneinandergeklebt
    bg_copy.name = bg_copy.name + " nr: " + str(nr)
    
    #pdb.gimp_image_add_layer(image, layer, position) <== Hilfe aus Browse (Gimp-Konsole)
    #Hiermit wird die Kopie auf den richtigen Platz zwischen geschoben
    # 2 * nr + 1  ergibt 1 , 3, 5, usw  für nr = 0, 1 , 2 , usw.
    pdb.gimp_image_add_layer(image, bg_copy, 2 * nr + 1)



#Wichtige Zwischenbemerkung, was bei anderen Programmiersprachen mit "begin  ...  end" oder
#   (....)  oder {...} wird in Python TOTAL ander gemacht nämlich mit Hilfe von (gleichässigem!) 
#Einspringen!
#def oben steht am ANFANG einer Zeile und dann eine ganze Menge Zeilen mit 4 Lehrzeichen (gleichmässig!)
#der sogenante "body" der Funktion (Hier unsichtbar abgeschlossen durcn CRLF am Anfang der Zeile
#nach: pdb.gimp_image_add_layer( ....) !!!!


#nun schiebe_bg_unter für alle vorhanden layers des Bildes ausführen
#len(...) ergibt die Anzahl von (...) hier die Anzahl der layers in image
#for startet eine Schleife ... mal ... wird hier mit Hilfe von range(...) gemacht
for tel in range(len(image.layers)):
    #na ja, nun mal TUN ;-)
    schiebe_bg_unter(tel, image)

#Leider ist zo das basis layer auch doppelt, und muss wieder weg und wurde ganz unten
#hinzugefügt
pdb.gimp_item_delete(image.layers[0])

#Das neu erstellte bild wird für GIF optimalisiert, None ist nichts, muss da sein tut nichts
#in diesem Fall (aus Browse geholt, da steht das das hinter  image, nicht benutzt wird!)
#Zur Deutlichkiet 'aufbewahrt' unter dem name 'result'
result = pdb.plug_in_animationoptimize(image, None)

#Man muss Bilder, die gerade erstellt sind auch noch ANZEIGEN (displayen english): das macht man so:
display = pdb.gimp_display_new(result)

#Jetzt soll nur jeder Zeite layer eine andere Anzeige-Zeit bekommen
#enumerate ist eine feine Sache von Python, es numeriert und gibt die Teile, dessen was numeriert
#auch an, setzt man (mit selbst gewählten Namen) hinter das Schleifen-for
for nr, layer  in enumerate(result.layers):
    
    #nur jedes zweite layer soll eine andere Anz eige-Zeit bekommen. 
    #Das macht man mit Python mit dem % - Operator  
    #nr % 2  teilt nr durch 2 und liefert eine 0 ab für
    #gerade Zahlen und den Rest (nämlich) 1 für ungerade Zahlen 
    # mit ==  vergleicht man die linke mit der rechten Seite von ==
    #if guckt nach, ob das was dahinter steht wahr (True) oder unwahr (False) ist
    #Wenn es nun True is mit nr (eine ganze Zahl!) wird die nächste Zeile augeführt
    #anders passiert nichts und der nächte Wert von der for - Schleife (falls es noch mehr
    #Möglichkeiten hat) wird ausgeführt oder die Schleife ist fertig
    if nr % 2 ==  0:
        #
        layer.name = layer.name.replace("100ms","1000ms")


#Und nun diesen Code ausprobieren!!!!!
#Probieren geht über Studieren!!!!
PeterPKHG 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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zur Collagenerstellung Fox-Lady Photobearbeitung 21 15.04.2009 14:26
Kleine Frage zu Linux Divinus OFF-Topic 23 22.11.2006 20:39
Is zwar nich mein erstes aber will wissen wies euch gefällt BlackHat Mein erstes Bild 10 16.06.2006 21:46


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:30 Uhr.


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