Vorher-Nachher-Vergleichspanel

Erstellt einen Vorher-Nachher-Vergleich zweier Bilder mit farblich gekennzeichneten Beschriftungsleisten und einer vertikalen Trennlinie. Demonstriert vertikale und horizontale Montage-Funktionen.

BEFORE
BEFORE — Vorher-Nachher-Vergleichspanel
AFTER
AFTER — Vorher-Nachher-Vergleichspanel
OUTPUT
OUTPUT — Vorher-Nachher-Vergleichspanel
JavaScript
// Side-by-side before / after comparison panel
// demo_compare.js
//!OUTPUT: OUTPUT
//!INPUT: BEFORE, AFTER
//!PARAM: LABEL_HEIGHT:number=28,min=10,max=200, DIVIDER_W:number=4,min=1,max=50

// demo_compare.js — side-by-side before / after panel
//
// Takes two separate input images (BEFORE and AFTER), resizes AFTER to match
// BEFORE's dimensions, adds a label bar via padTop + padLeft/padRight, then
// joins them with a thin divider strip using montageH.

const before = Engine.loadImage(BEFORE);
const after  = Engine.loadImage(AFTER).resize(before.width, before.height);

const LH = Math.max(0, Math.round(LABEL_HEIGHT));
const DW = Math.max(1, Math.round(DIVIDER_W));

// label background via padTop; text would need canvas — here we just tint
// the top strip so it's visually distinct.
const labelBefore = before.clone()
  .crop(0, 0, before.width, LH)
  .tint("#669fff", 0.7);            // blue-ish label strip

const labelAfter = after.clone()
  .crop(0, 0, after.width, LH)
  .tint("#66ff80", 0.7);            // green-ish label strip

// compose each panel: label on top
const panelBefore = labelBefore.montageV(before);
const panelAfter  = labelAfter.montageV(after);

// divider: a narrow black strip, full height
const totalH = panelBefore.height;
const divider = Engine.createImage(DW, totalH)
  .tint("#0d0d0d", 1.0);

panelBefore.montageH(divider, panelAfter).save(OUTPUT);

// © 2026 Michael Lechner · mlc OpticScript · https://mlcgo.eu · Elastic License 2.0