*/ $quelle = rtrim($argv[1] ?? '', '/\\'); $ziel = rtrim($argv[2] ?? '', '/\\'); if ('' === $quelle || '' === $ziel || !is_file($quelle.'/EBI.png')) { fwrite(STDERR, "Aufruf: php scripts/build-ebi-immobilien-assets.php \n"); exit(1); } if (!is_dir($ziel) && !mkdir($ziel, 0775, true)) { fwrite(STDERR, "Zielordner lässt sich nicht anlegen: $ziel\n"); exit(1); } /** Ein Ausschnitt, auf eine Zielbreite verkleinert, als WebP. */ $webp = static function (string $datei, string $name, int $x, int $y, int $b, int $h, int $breite) use ($quelle, $ziel): void { $pfad = $quelle.'/'.$datei; $bild = str_ends_with($datei, '.png') ? imagecreatefrompng($pfad) : imagecreatefromjpeg($pfad); if (false === $bild) { fwrite(STDERR, "Bild lässt sich nicht lesen: $pfad\n"); exit(1); } $hoehe = (int) round($h * $breite / $b); $neu = imagecreatetruecolor($breite, $hoehe); imagecopyresampled($neu, $bild, 0, 0, $x, $y, $breite, $hoehe, $b, $h); imagewebp($neu, $ziel.'/'.$name, 78); echo "$name: {$breite} × {$hoehe}\n"; }; // Startbild: liegt im Quellordner eine Datei „startbild.jpg/.png/.webp“ (z. B. ein neu erzeugtes // Bild), wird sie auf 1920 px Breite und höchstens 16:9 gebracht. Sonst das Original-Hero, das oben // einen 116 px hohen grauen Balken trägt (Zuschnitt des Themes). $eigenes = glob($quelle.'/startbild.{jpg,jpeg,png,webp}', GLOB_BRACE) ?: []; if ([] !== $eigenes) { $pfad = $eigenes[0]; $bild = match (strtolower(pathinfo($pfad, PATHINFO_EXTENSION))) { 'png' => imagecreatefrompng($pfad), 'webp' => imagecreatefromwebp($pfad), default => imagecreatefromjpeg($pfad), }; $b = imagesx($bild); $h = min(imagesy($bild), (int) round($b * 9 / 16)); $y = (int) round((imagesy($bild) - $h) / 2); $breite = min(1920, $b); $hoehe = (int) round($h * $breite / $b); $neu = imagecreatetruecolor($breite, $hoehe); imagecopyresampled($neu, $bild, 0, 0, 0, $y, $breite, $hoehe, $b, $h); imagewebp($neu, $ziel.'/startbild.webp', 78); echo "startbild.webp aus ".basename($pfad).": {$breite} × {$hoehe}\n"; } else { $webp('karlsruhe-3518473_1920-e1600241476184.png', 'startbild.webp', 0, 118, 1920, 722, 1920); } $webp('workbook-1205044_1920-1920x1280.jpg', 'bewertung.webp', 0, 0, 1920, 1280, 1600); $webp('services-h-fig-1920x1280.jpg', 'schreibtisch.webp', 0, 0, 1920, 1280, 1600); // Logo: durchsichtigen Rand abschneiden und verkleinern. $logo = imagecreatefrompng($quelle.'/EBI.png'); [$links, $oben, $rechts, $unten] = [imagesx($logo), imagesy($logo), 0, 0]; for ($y = 0; $y < imagesy($logo); ++$y) { for ($x = 0; $x < imagesx($logo); ++$x) { if ((imagecolorat($logo, $x, $y) >> 24 & 0x7F) < 120) { $links = min($links, $x); $rechts = max($rechts, $x); $oben = min($oben, $y); $unten = max($unten, $y); } } } $b = $rechts - $links + 1; $h = $unten - $oben + 1; $breite = 680; $hoehe = (int) round($h * $breite / $b); $neu = imagecreatetruecolor($breite, $hoehe); imagealphablending($neu, false); imagesavealpha($neu, true); imagefill($neu, 0, 0, imagecolorallocatealpha($neu, 0, 0, 0, 127)); imagecopyresampled($neu, $logo, 0, 0, $links, $oben, $breite, $hoehe, $b, $h); imagepng($neu, $ziel.'/logo.png', 9); echo "logo.png: {$breite} × {$hoehe}\n"; copy($quelle.'/cropped-favicon-192x192.png', $ziel.'/favicon.png'); echo "favicon.png übernommen\n";