Text in bild schreiben -> falsche umlaute

hallo!
ich möchte mir mit einem kelinen script einen text auf ein bild schreiben lassen.
mein problem ist, dass umlaute falsch dargestellt werden. in einem anderen forum wurden schon etliche versuche gestartet, das hin zu bekommen, aber dort sagte man mir, dass es am space anbieter liegen müsse.

meine php wurde in utf8 ohne bom angelegt (definitiv!).

hier mal das kleine script:

<?php $im = imagecreatetruecolor(320, 100); $mein_text = "büro"; imagettftext($im, 13, 0, 10, 50, 0xffffff, "arial.ttf", $mein_text); imagepng($im, 'vorlagen/test.png'); ?>

und hier das resultat:

könnte mir da jemand bei helfen?

LG

Schonmal versucht nen header mitzuschicken?!

amityville - das täte ja Klartext ausgeben, nicht PNG.
Wobei das Skript aktuell gar keine Ausgabe hat, sondern das
PNG in eine Datei schreibt. Der header wird aber nur an den
browser gesendet, für das, was dorthin ausgegeben wird.

Da jedenfalls das PNG keinen Text mehr enthält, sondern nur
noch Farbverteilungsinformationen, ist belanglos, was da mal
wie kodiert war.
Das letzte, was da auf eine passende Kodierung angewiesen ist,
ist die Funktion imagettftext von PHP. Daher ist es belanglos,
was man dem browser per header mitteilt.

Wenn man Text als lesbaren Text in einer Graphik verwenden
will, nicht als willkürliche Farbverteilung, so verwendet man
besser SVG statt Pixelgraphik.

hallo!
amityville:
mit einem header habe ich es bereits erfolglos versucht!

hoffmann:
hättest du dafür vielleicht einen link?

LG

hallo nochmals!

also ich würde mich nach wie vor über eine hilfestellung freuen :hail:

LG

ich hab keine Erfahrung mit Text in Bildern, deshalb kann das jetzt follgende vollkommen falsch sein: Büro

Aber kp, ob des so überhaupt gehen würde, oder ob des dann genauso auf dem Bild steht.

Chris

Ich würde einfach mal utf8_decode() auf $mein_text anwenden.

Ich würde einfach mal die SuFu nach Random Tutorial durchsuchen - da ist ne längere diskussion über diesen FEhler und ne Lösung wie man ihn umgehen kann.

hallo!
die tipps habe ich der reihe nach ausprobiert, aber funktioniert hat am ende nur der tipp von kerbination :slight_smile:

der vollständigkeit hier die vorläufige lösung:

function StringToUnicode ($str) { $len = strlen ( $str ); $newstr = ''; for ($i = 0; $i < $len; $i++) { if (ord($str[$i]) >= 160) $newstr = $newstr.'&#'.ord($str[$i]).';'; else $newstr = $newstr.$str[$i]; } return ($newstr); }

“vorläufig” deshalb, weil das script laut einem anderen user, nicht immer funktioniert. ich werde dann mal damit etwas rumprobieren und mich dann ggf wieder melden!

LG

Wenn es nur um die Umlaute geht könnte man das ganze doch mit str_replace lösen - ist sicher nicht die eleganteste Lösung, sollte aber funktionieren.

versuch es mal so.

<?php
function umlaute($text)
{
$text = (string) $text;
$text_out = "";
for($i = 0, $n =  strlen($text); $i < $n; $i++)
{
$text_out .= "&#" . ord($text[$i]) . ";";
}
return $text_out;
}

$im = imagecreatetruecolor(320, 100);
$mein_text = "büro";
$mein_text = umlaute($mein_text);
imagettftext($im, 13, 0, 10, 50, 0xffffff, "arial.ttf", $mein_text);
imagepng($im, 'vorlagen/test.png');
?>

mfg Drenton