Neulich ist mir ja aufgefallen, dass man in Lightroom Scripte einbauen kann, die nach dem Export der Bilder aufgerufen werden und die Bilder noch irgendwie weiter verarbeiten können. Ich wollte schon immer die Möglichkeit haben so eine Art „Kontaktbogen“ direkt aus Lightroom heraus erzeugen zu können – das geht schon irgendwie mit dem Druckmodul (da kriegt dann man wohl ein PDF, was den Nutzen eher einschränkt) und vermutlich gibt es auch irgendwelche Plugins die sowas tun können… Aber selbst ist der Mann!
Ein Python-Script, welches so einen Kontaktbogen baut und aus Lightroom (oder der Shell) aufgerufen werden kann, sieht etwa so aus:
#!/path/to/whatever/python/venv/bin/python3 #changeme
from PIL import Image
import sys
import math
import os
border = 10
images = [Image.open(image) for image in sys.argv[1:]]
num_images = len(images)
max_width = max(image.width for image in images)
max_height = max(image.height for image in images)
num_per_row = math.ceil(math.sqrt(num_images))
num_rows = math.ceil(num_images / num_per_row)
canvas_width = num_per_row * (max_width + border) + border
canvas_height = num_rows * (max_height + border) + border
canvas = Image.new('RGB', (canvas_width, canvas_height), 'white')
for i in range(num_images):
image = images[i]
row = i // num_per_row
col = i % num_per_row
x_offset = col * (max_width + border) + border
y_offset = row * (max_height + border) + border
x_center_offset = (max_width - image.width) // 2
y_center_offset = (max_height - image.height) // 2
canvas.paste(image, (x_offset + x_center_offset, y_offset + y_center_offset))
script_dir = os.path.dirname(os.path.abspath(__file__))
canvas.save(os.path.join(script_dir, 'full_size.jpg'), quality=96)
if canvas_width > 1200 or canvas_height > 1200:
canvas.thumbnail((1200, 1200))
canvas.save(os.path.join(script_dir, 'resized_1200x1200.jpg'), quality=96)
for image_path in sys.argv[1:]:
os.remove(image_path)
Beim Export der Bilder empfielt es sich das TIFF-Format zu verwenden, um Verluste durch Kompression zu vermeiden, und die Bildgröße auf etwa 250 Pixel auf der längsten Kante zu beschränken, um den erzeugten Kontaktbogen nicht abartig groß werden zu lassen.
Schreibe einen Kommentar