Wann immer ich ein Foto auf dem Blog oder in sozialen Netzwerken poste, möchte ich, dass ein kleiner Rahmen darum herum ist. Der Grund dafür ist, dass sich das Bild optisch vom Hintergrund der Webseite abhebt. Außerdem ist es in gewisser Weise eine dezente Art des Brandings in sozialen Medien. Das Ganze sieht dann etwa so aus:
Nun ist Lightroom in solchen Sachen etwas eingeschränkt, daher muss man den Rahmen irgendwie extern hinzufügen. Vor längerer Zeit habe ich das mit einem Shell-Script namens brdr
erledigt, das ein Bild als Argument erhält und mit Hilfe von mogrify
einen Rahmen anfügt. brdr
muss ich allerdings immer manuell über die Shell aufrufen, was ein bisschen nervt.
Jetzt habe ich gerade im Export-Modul von LR gesehen, dass ganz unten, perfekt vor neugierigen Blicken versteckt, ein „Nachbearbeitung“-Menü existiert. Dieses bietet die Möglichkeit, Bilder nach dem Export in einem externen Programm weiterverarbeiten zu lassen. Öha.
Also habe ich brdr
in LR als externes Nachbearbeitungsprogramm eingetragen und ein Bild exportiert. Es passierte jedoch nichts.
Nach einigen Versuchen habe ich herausgefunden, dass in der Umgebung, in der die aufgerufenen Skripte ausgeführt werden, keine Pfade gesetzt sind. Natürlich – wie auch… Also muss mogrify
einfach mit absolutem Pfad aufgerufen werden! Nun funktioniert es. Naja, fast.
Man muss nämlich Folgendes wissen: Exportiert man mehrere Fotos aus Lightroom, ruft LR das eingetragene Skript nicht wie vermutet einzeln nach dem Export jedes einzelnen Fotos auf (also brdr Dateiname
), sondern ruft es nach dem Export aller Fotos auf: brdr Dateiname1 Dateiname2 Dateiname3
…
Daher muss eine passende for
-Schleife in das Skript eingebaut werden, die diese Liste von Argumenten abarbeitet. Heureka.
Ein Minimal Viable Product eines Lightroom-Bash-Skripts sieht etwa so aus:
#!/bin/bash
########## Config ##########
MAGICK="/usr/local/bin/magick" #changeme
############################
for file in "$@"; do
newFileName="${file%.*}".jpg
$MAGICK "$file" \
-bordercolor white -border 50 \
"$newFileName"
done
Analog lassen sich so natürlich auch Python-Scripte einbinden, die ggf. komplexere Dinge tun könnten. Hier sieht das MVP so aus:
#!/path/to/whatever/python/venv/bin/python3 #changeme
from PIL import Image, ImageOps
import sys
import os
def convert(files):
for file in files:
new_file_name = os.path.splitext(file)[0] + ".jpg"
with Image.open(file) as img:
img_with_border = ImageOps.expand(img, border=50, fill='white')
img_with_border.save(new_file_name, 'JPEG')
if __name__ == "__main__":
convert(sys.argv[1:])
Schreibe einen Kommentar