Moin auch,
ich benutze GIMP schon recht lange und bin auch sehr zufrieden damit. Nun ist es allerdings angebracht das ich etwas Batch Scripting betreibe da ich gerade ein Kartenspiel auf deutsch übersetze und ungern 250 dateien einzeln editieren und Umrandungen zu den Texten hinzufügen möchte.
Ich bin von Beruf Programmierer und ich habe es oft versucht, aber für mich ist das Scripting interface von GIMP sehr obtus... ich steige beim besten Willen einfach nicht durch und habe ehrlich gesagt auch keine Lust mehr
Würde deswegen gerne nachfragen ob jemand so nett sein könnte mir das Script wie ich es benötige zusammen zu schreiben. Meist kann ich anhand eines solchen beispiels mich entlanghangeln und selber scripten, aber ich habe bis jetzt nicht den Fuß in die Tür bekommen...
Folgende Situation:
Mehrere Dateien in denen mehrere Layer vorhanden sind. Ein bestimmter Layer mit Text ist in jeder Datei vorhanden und heißt immer gleich.
Zu diesem Text Layer soll ein weiterer Layer hinzugefügt werden als Umrandung (Alphakanal wählen, vergrößern, neuer layer, mit farbe füllen). Dafür kann man das Script von https://pete.nu/software/gimp-outliner/ nutzen, das funktioniert soweit auch gut.
Das ganze soll dann als png exportiert werden.
Ich hab das mit dem outliner script und BIMP schon versucht, aber BIMP hat das dann immer aufs ganze Bild angewandt anstatt auf einen Layer und ich hab nicht rausgefunden wie ich es auf einen Layer begrenze.
Sorry falls ich etwas bitter rüberkomme, ich bin einfach frustriert, frustriert das ich durch das scripting nicht durchblicke.
Hoffe mir kann jemand helfen, vielen Dank im voraus.
Batch Scripting Hilfe
-
- Beiträge: 3
- Registriert: Mo 14. Dez 2020, 19:46
- Betriebssystem: Ubuntu
- anke
- Site Admin
- Beiträge: 2000
- Registriert: Fr 21. Aug 2020, 20:54
- Wohnort: Osnabrück
- Deine Galerie: https://gimp-werkstatt.de/werkstatt-galerie/eleanora/
- Betriebssystem: XUbuntu
- Kontaktdaten:
Re: Batch Scripting Hilfe
hallo und willkommen im Forum!
Also scripten kann ich selber nicht. Bin halt keine Programmiererin Aber wir hatten mal ein total cleveres Mitglied, die hat uns 3 Tutorien zum Scripten geschrieben:
Das bisschen Script-Fu macht sich von allein ... Part 1
Das bisschen Script-Fu macht sich von allein ... Part 2
Das bisschen Script-Fu macht sich von allein ... Part 3
Ich hoffe wir können dir damit ein wenig weiterhelfen.
Viel Spaß
Gruß Anke
Also scripten kann ich selber nicht. Bin halt keine Programmiererin Aber wir hatten mal ein total cleveres Mitglied, die hat uns 3 Tutorien zum Scripten geschrieben:
Das bisschen Script-Fu macht sich von allein ... Part 1
Das bisschen Script-Fu macht sich von allein ... Part 2
Das bisschen Script-Fu macht sich von allein ... Part 3
Ich hoffe wir können dir damit ein wenig weiterhelfen.
Viel Spaß
Gruß Anke
Wer denkt, dass Administratoren administrieren,
und Moderatoren moderieren,
denkt auch das Zitronenfalter Zitronen falten
Meine Galerie
Meine alte Galerie
und Moderatoren moderieren,
denkt auch das Zitronenfalter Zitronen falten
Meine Galerie
Meine alte Galerie
- Gimplyworxs
- Beiträge: 2716
- Registriert: Sa 22. Aug 2020, 09:11
- Wohnort: Crailsheim, BaWü
- Deine Galerie: https://gimp-werkstatt.de/werkstatt-galerie/gimplyworxs
- Betriebssystem: Linux Mint 20.1 MATE
Re: Batch Scripting Hilfe
Hallo,
das von dir genannte Script erwartet als eingabe die aktivierte Textebene. Das kann man per BIMP halt nicht bieten, weshalb es vermutlich scheitert.
Ich schau mir dein Problem gerne mal an. Hilfreich wäre mal so eine von deinen Dateien zu sehen.
Kannst du mir mal ne PM oder Mail schicken?
das von dir genannte Script erwartet als eingabe die aktivierte Textebene. Das kann man per BIMP halt nicht bieten, weshalb es vermutlich scheitert.
Ich schau mir dein Problem gerne mal an. Hilfreich wäre mal so eine von deinen Dateien zu sehen.
Kannst du mir mal ne PM oder Mail schicken?
Viele Grüße
Gimplyworxs
Gimplyworxs
-
- Beiträge: 3
- Registriert: Mo 14. Dez 2020, 19:46
- Betriebssystem: Ubuntu
Re: Batch Scripting Hilfe
@anke Danke dir, ich bin grad ein bisschen gnadschig aufs gimp-scripten... zum nächsten Mal schau ich mir die tutorials an
@Gimplyworxs ich schick dir mal ne PM. Die Lösung packen wir dann wieder hier ins Thema für zukünftige Sucher.
@Gimplyworxs ich schick dir mal ne PM. Die Lösung packen wir dann wieder hier ins Thema für zukünftige Sucher.
-
- Beiträge: 3
- Registriert: Mo 14. Dez 2020, 19:46
- Betriebssystem: Ubuntu
Re: Batch Scripting Hilfe
So, noch mal abschließend, Gimplyworxs hat mir ein Script geschickt das schon sehr gut aussah und mit ein bisschen umstellen auch das gemacht hat was ich wollte.
Ich habe das Skript nun noch ein wenig verändert und nun tut es genau das was ich will:
Dieses Skript kann man über gimp ausführen, man gibt ein quell verzeichnis an, ein ausgangs verzeichnis. Rein gehen xcf files und raus kommen pngs.
Randfarbe auswähen womit dann eine schriftebene umrandet wird, ebenso breite und den namen der ebene die umrandet werden soll.
Dann anschmeißen und alle xcf's werden so behandelt und ausgegeben.
Dadurch konnte ich nun meine Kartenspiel-Übersetzung fertigstellen
Ich habe das Skript nun noch ein wenig verändert und nun tut es genau das was ich will:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# https://stackoverflow.com/questions/5794640/how-to-convert-xcf-to-png-using-gimp-from-the-command-line
# http://gimpchat.com/viewtopic.php?f=9&t=15024
from gimpfu import *
import os
def batch_convert_xcf_to_png(inputFolder, outputFolder, color, randbreite, ebenen_name):
''' Convert the xcf images in a directory to png.
Parameters:
img : image The current image (unused).
layer : layer The layer of the image that is selected (unused).
inputFolder : string The folder of the images that must be modified.
outputFolder : string The folder in which save the modified images.
'''
# Iterate the folder
for file in os.listdir(inputFolder):
try:
# Build the full file paths.
inputPath = inputFolder + "/" + file
new_name = file.rsplit(".",1)[0] + ".png"
outputPath = outputFolder + "/" + new_name
# Open the file if is a XCF image.
image = None
if(file.lower().endswith(('.xcf'))):
image = pdb.gimp_xcf_load(1,inputPath, inputPath)
# ab hier
layer = pdb.gimp_image_get_layer_by_name(image, ebenen_name)
parent = pdb.gimp_item_get_parent(layer)
# Auswahl aus Alphakanal:
pdb.gimp_image_select_item(image, CHANNEL_OP_ADD, layer)
# um randbreite größer:
pdb.gimp_selection_grow(image, randbreite)
# neue Ebene erstellen
outline_layer = pdb.gimp_layer_new(image, image.width, image.height, RGBA_IMAGE, "outline", 100, LAYER_MODE_NORMAL)
# Ebene einfügen
pdb.gimp_image_insert_layer(image, outline_layer, parent, -1)
# Ebene absenken unter den Text
pdb.gimp_image_lower_item(image, outline_layer)
# Vordergrundfarbe setzen:
pdb.gimp_context_set_foreground(color)
# Outline Ebene füllen
# pdb.gimp_drawable_fill(outline_layer, FILL_FOREGROUND)
pdb.gimp_edit_bucket_fill(outline_layer, BUCKET_FILL_FG, LAYER_MODE_NORMAL, 100, 0, FALSE, 0, 0)
# Auswahl wieder entfernen
pdb.gimp_selection_none(image)
# bis hier
# Verify if the file is an image.
if(image != None):
#layer = pdb.gimp_image_merge_visible_layers(image, gimpfu.CLIP_TO_IMAGE)
layer = pdb.gimp_image_merge_visible_layers(image, 1)
# Save the image.
# pdb.file_png_save(image, drawable, filename, raw_filename, interlace, compression, bkgd, gama, offs, phys, time)
pdb.file_png_save(image, layer, outputPath, outputPath, 0, 9, 0, 0, 0, 0, 0)
except Exception as err:
gimp.message("Unexpected error: " + str(err))
'''
img = pdb.gimp_file_load(filename, filename)
new_name = filename.rsplit(".",1)[0] + ".png"
layer = pdb.gimp_image_merge_visible_layers(img, gimpfu.CLIP_TO_IMAGE)
pdb.gimp_file_save(img, layer, new_name, new_name)
pdb.gimp_image_delete(img)
'''
register(
"batch_convert_xcf_to_png",
"convert chris",
"convert ",
"Chris O'Halloran",
"Chris O'Halloran",
"2014",
"Batch batch convert xcf to png",
"", # start with no image
[
(PF_DIRNAME, "inputFolder", "Input directory", ""),
(PF_DIRNAME, "outputFolder", "Output directory", ""),
(PF_COLOR, "color", "Randfarbe", "#000000"),
(PF_SPINNER, "randbreite", "Randbreite", 5, (1, 10, 1)), # Default,(Minimun,Maximum, Schrittweite)
(PF_STRING, "ebenen_name", "Name zu Umrandenden Ebene", "Product Text"),
],
[],
batch_convert_xcf_to_png, menu="<Image>/Test")
main()
Dieses Skript kann man über gimp ausführen, man gibt ein quell verzeichnis an, ein ausgangs verzeichnis. Rein gehen xcf files und raus kommen pngs.
Randfarbe auswähen womit dann eine schriftebene umrandet wird, ebenso breite und den namen der ebene die umrandet werden soll.
Dann anschmeißen und alle xcf's werden so behandelt und ausgegeben.
Dadurch konnte ich nun meine Kartenspiel-Übersetzung fertigstellen