Ich möchte einem Foto einen variablen Text (Dateiname) hinzufügen und den Hintergrund mit einer Farbe (weiß) füllen, damit der Text gut sichtbar ist.
Wie kann ich die bereits erstellte Textebene bequem zB Danube-Iron-Gates(c) TEST
mit einem farbigen zB weißen Hintergrund füllen?
Ich verwende GIMP 2.10.2 (Windows10).
Der folgende Beispielcode führt bei zweimaliger Verwendung des Python-Plugins zum Ergebnisbild mit Text inklusive Rand, den ich hier angehängt habe. Der Code hat nur Entwicklungsstufe.
#!/usr/bin/env python
# --------------------------------------------
# Add file name box
# --------------------------------------------
# Change Log
# ============================================
# Version 0.0.1 Initial release.
import math
import os
import os.path
import sys
from array import array
from gimpfu import *
#------------------------------
def format_pkz(sText):
sConcatenatedText = sText + "(c) TEST"
return sConcatenatedText
# -------------------------------------------------------------------------------------------
def add_filename_box(image, layer, use_filename, pkz1, placement):
# set start of undo
pdb.gimp_image_undo_group_start(image)
# Save the current foreground color:
pdb.gimp_context_push()
# Set foreground and background color to default
gimp.set_foreground(0,0,0)
gimp.set_background(255, 255, 255)
# use filename for pkz1
if use_filename:
filename = image.filename
filename_w_ext = os.path.basename(filename)
file_name, file_extension = os.path.splitext(filename_w_ext)
pkz1 = format_pkz(file_name)
if placement == 0: # top right
xOffset = image.width - 630
yOffset = 50
elif placement == 1: # down right
xOffset = image.width - 630
yOffset = image.height - 150
elif placement == 2: # down left
xOffset = 50
yOffset = image.height - 150
else: # top left
xOffset = 50
yOffset = 50
# create layer with text and add it to the image: image, drawable, x, y, text, border, antialias, size, size_type, fontname
pdb.gimp_text_fontname(image, None, xOffset, yOffset, pkz1 , 10, True, 64, PIXELS, "Verdana Bold")
else: # don't use file name
xOffset = 50
yOffset = 200
# create layer with text and add it to the image: image, drawable, x, y, text, border, antialias, size, size_type, fontname
pdb.gimp_text_fontname(image, None, xOffset, yOffset, pkz1 , 10, True, 64, PIXELS, "Verdana Bold")
# Restore the old foreground color:
pdb.gimp_context_pop()
# set end of undo
pdb.gimp_image_undo_group_end(image)
# -----------------------------------------------------------------------------
# register the plug-in
# -----------------------------------------------------------------------------
register(
"python_fu_add_filename_box",
"My function test.",
"My function test for developing cases.",
"help-info.de",
"help-info.de (c)",
"2018-06-03",
"<Image>/DEVELOP/Add filename box ...",
"RGB*",
[
(PF_TOGGLE, "use_filename", "PKZ aus Dateinamen ableiten", 1),
(PF_STRING, "pkz1", "User Input", "0000-0-00000"),
(PF_OPTION, "placement", "Placement", 3, ("top right", "down right", "down left", "top left")),
],
[],
add_filename_box)
main()
Verschiedene Wege:
Einfacher ist es, die Textebene im behind
Modus mit Eimern zu füllen:
pdb.gimp_selection_all(image)
pdb.gimp_edit_bucket_fill(textlayer, BUCKET_FILL_FG, LAYER_MODE_BEHIND, 100, 0, False, 0, 0)
Die Textebene hat jedoch sehr wenig Platz an den Seiten, sodass das Ergebnis unausgewogen sein kann. Ein Trick könnte darin bestehen, Ihren Text an beiden Enden mit Leerzeichen aufzufüllen, um die Textebene zu erweitern
Sie fügen eine Ebene unter der Textebene hinzu (dabei können Sie ihre Größe/Position auswählen) und füllen sie mit der gewünschten Farbe
Sie fügen eine weitere Ebene hinzu, die mit einer beliebigen Farbe gefüllt ist, erhalten dann eine Alpha-Auswahl auf der Textebene ( pdb.gimp_select_item(textlayer)
) und füllen dann die Auswahl auf der hinzugefügten Ebene (und blenden den Text aus).
Erstellen Sie einen weißen Umriss, indem Sie den Pfad im Linienmodus mit einer 1-Pixel-Linie streichen:
# Line mode for Stroke (new in 2.10)
pdb.gimp_context_set_stroke_method(STROKE_LINE)
pdb.gimp_context_set_line_width(width)
# You may need to use these three as well
pdb.gimp_context_set_line_cap_style(...)
pdb.gimp_context_set_line_join_style(...)
pdb.gimp_context_set_line_miter_limit(...)
pdb.gimp_drawable_edit_stroke_item(drawable, path)
Auf ein paar schwierigen Hintergründen:
Ich kann Ihnen eine einfache Möglichkeit nennen, dies in GIMP zu tun, ohne es zu skripten. Das kann Ihnen also beim Skript helfen.
Erstellen Sie eine Textebene
Verwerfen Sie die Textinformationen (dadurch wird der Text gerastert)
Entfernen Sie den Alphakanal
Die transparenten Pixel in der Textebene werden mit der ausgewählten Hintergrundfarbe gefüllt. In diesem Beispiel ist die ausgewählte Hintergrundfarbe Weiß:
Michael Schumacher