Dieses Dreamcodes Codeschnipsel Script erstellt individuelle Smiley Schild Bilder direkt aus Text und einem Smiley PNG. Es kombiniert dynamisch berechnete Textfelder mit einem zentrierten Smiley und erzeugt dabei skalierbare SVG-Dateien.
Funktionen im Überblick:
- Dynamische Textanpassung: Der Text wird automatisch umgebrochen und zentriert, egal wie lang er ist.
- Automatische Smiley-Größenanpassung: Der Smiley passt sich an die Textbreite an, bleibt aber immer gut sichtbar.
- SVG-Ausgabe: Hochauflösende, skalierbare Grafiken, die ohne Qualitätsverlust vergrößert oder verkleinert werden können.
- Zufällige Dateinamen: Verhindert das Überschreiben bestehender Dateien.
Einfach Text eingeben, Smiley auswählen, fertig!
<?php
function schildSVG(string $text, string $bild): string
{
$fontFile = __DIR__ . "/fonts/Arial.ttf";
if (!is_file($fontFile)) {
return "Fehler: Schriftart nicht gefunden.";
}
$wrapped = wordwrap($text, 20, "\n");
$lines = explode("\n", $wrapped);
$fontSize = 16;
$lineHeight = 1.4 * $fontSize;
$padding = 10;
$textWidth = 0;
foreach ($lines as $line) {
$bbox = imagettfbbox($fontSize, 0, $fontFile, $line);
$lineWidth = $bbox[2] - $bbox[0];
if ($lineWidth > $textWidth) {
$textWidth = $lineWidth;
}
}
$textHeight = count($lines) * $lineHeight;
$smilePath = __DIR__ . "/smile/" . basename($bild) . ".png";
if (!is_file($smilePath)) {
return "Fehler: Smiley-Vorlage nicht gefunden.";
}
[$smileOrigW, $smileOrigH] = getimagesize($smilePath);
$smileWidth = max(64, $textWidth);
$smileHeight = intval($smileOrigH * ($smileWidth / $smileOrigW));
$width = $smileWidth + 2 * $padding;
$height = $textHeight + $smileHeight + 3 * $padding;
$svg = <<<SVG
<svg xmlns="http://www.w3.org/2000/svg" width="{$width}" height="{$height}">
<rect x="0" y="0" width="100%" height="100%" fill="rgb(245,252,255)" stroke="black" stroke-width="1"/>
<rect x="{$padding}" y="{$padding}" width="{$width - 2*$padding}" height="{$textHeight + $padding}" fill="white"/>
SVG;
$y = $padding + $fontSize;
foreach ($lines as $line) {
$svg .= "\n <text x=\"{$padding}\" y=\"{$y}\" font-family=\"Arial, sans-serif\" font-size=\"{$fontSize}\" fill=\"black\">$line</text>";
$y += $lineHeight;
}
$smileX = ($width - $smileWidth) / 2;
$smileY = $textHeight + 2 * $padding;
$svg .= "\n <image href=\"smile/" . basename($bild) . ".png\" x=\"{$smileX}\" y=\"{$smileY}\" width=\"{$smileWidth}\" height=\"{$smileHeight}\"/>";
$svg .= "\n</svg>";
$nr = random_int(1, 999999);
$outFile = __DIR__ . "/smile/{$nr}.svg";
file_put_contents($outFile, $svg);
return "<img src=\"smile/{$nr}.svg\" alt=\"smile\">";
}
?>
