/* * Zeichnet die Bildkarten der KANTARCI-Mietanfrage und rastert sie zu PNG. * * Die Formularbausteine zeigen eine Auswahl als Bildkarten, sobald eine Option ein Bild aus der * Mediathek hat - und die Mediathek nimmt kein SVG. Deshalb entstehen die Symbole hier als SVG * und werden mit Chromium auf 800 × 600 (4:3 wie die Karte) gerastert. Stil der Landingpage: * dünne Linie in Navy, runde Enden, ein goldener Akzent, warme helle Fläche dahinter. * * node scripts/build-kantarci-options.mjs → var/kantarci-immobilien-assets/options/*.png und *.svg */ import { chromium } from 'playwright'; import { mkdir, writeFile } from 'node:fs/promises'; const ziel = process.argv[2] || 'var/kantarci-immobilien-assets/options'; const NAVY = '#142535', GOLD = '#b49a66', HELL = '#f5f3ee', PAPIER = '#ffffff'; const bild = (inhalt) => ` ${inhalt} `; /** Eine Person: Kopf und Schultern. */ const person = (x, y, s = 1, farbe = NAVY) => ` `; /** Ein Grundriss: Außenwand, dazu Innenwände; der jeweils letzte Raum ist golden hinterlegt. */ const grundriss = (waende, akzent) => ` ${akzent ? `` : ''} ${waende}`; const bilder = { // Wer zieht ein? 'haushalt-allein': person(400, 330, 1.3), 'haushalt-zu-zweit': person(275, 330, 1.1) + person(525, 330, 1.1, GOLD), 'haushalt-familie': person(250, 320, 1.1) + person(550, 320, 1.1) + person(400, 400, .7, GOLD), 'haushalt-wg': person(200, 340, .9) + person(400, 340, .9, GOLD) + person(600, 340, .9), // Wie viele Zimmer? 'zimmer-1': grundriss('', 'M177 137h446v326H177z'), 'zimmer-2': grundriss('', 'M407 137h216v326H407z'), 'zimmer-3': grundriss('', 'M367 307h256v156H367z'), 'zimmer-4': grundriss('', 'M407 307h216v156H407z') + ``, // Was ist Ihnen wichtig? 'ausstattung-balkon': ` `, 'ausstattung-aufzug': ` `, 'ausstattung-stellplatz': ` `, 'ausstattung-kueche': ` `, 'ausstattung-barrierefrei': ` `, 'ausstattung-haustier': ` `, }; await mkdir(ziel, { recursive: true }); const browser = await chromium.launch(); const page = await browser.newPage({ viewport: { width: 800, height: 600 }, deviceScaleFactor: 1 }); for (const [name, inhalt] of Object.entries(bilder)) { const svg = bild(inhalt); await writeFile(`${ziel}/${name}.svg`, svg); await page.setContent(`${svg}`); await page.locator('svg').screenshot({ path: `${ziel}/${name}.png`, omitBackground: false }); console.log('gezeichnet:', name); } await browser.close();