Vad får du om du använder imagestring?
Om typsnittet som används inte innehåller å får man istället í. Det känns märkligt att du skulle få ett å med imagechar.
3 svar · 217 visningar · startad av muskot
Nu har jag problem igen, så jag provar att posta igen och hoppas att det går lika bra som förra gången :).
Med denna kodsnutt vill jag skriva alla tecken i $string till en bild. Problemet är att "å" ersätts av "í".
<?php
$string = "ååå";
$im = imagecreate(600, 20);
$bg = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
$i = 0;
$x_pos = 0;
while (strlen($string) > $i) {
imagechar($im, 2, $x_pos, 0, $string{$i}, $black); // skriver ut "ííí"
$x_pos = $x_pos + 5;
$i++;
}
header('Content-type: image/png');
imagepng($im);
?>
För att felsöka har jag testat lite olika varianter. Med nedanstående kod får jag in "å" i bildfilen, men förstås endast första tecknet i strängen (vilket tyder på att imagechar() inte har problem med tecknet "å"):
<?php
$string = "ååå";
$im = imagecreate(600, 20);
$bg = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
imagechar($im, 2, 0, 0, $string, $black); // skriver ut "å"
header('Content-type: image/png');
imagepng($im);
?>
Denna kodsnutt skriver i textformat ut alla tecken korrekt (vilket tyder på att substr() inte har problem med tecknet "å"):
<?php
$string = "ååå";
$im = imagecreate(600, 20);
$bg = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
$i = 0;
while (strlen($string) > $i) {
echo $string{$i}; // skriver ut "ååå"
$i++;
}
?>
Det verkar alltså vara kombinationen av imagechar() och substr() som strular. Har testat både substr($string, $i, 0) och $string{$i}, med samma resultat.
Hur löser jag detta?
Vad får du om du använder imagestring?
Om typsnittet som används inte innehåller å får man istället í. Det känns märkligt att du skulle få ett å med imagechar.
Vet inte om fiddler glömde ett inte i sitt inlägg, annars håller jag med.
Använder man imagestring() finns inget å i den teckentabell som PHP använder. Det är förmodligen samma teckentabell som imagechar() använder.
Fonten går dock att byta ut. Kollar du i manualen på imagestring finns det där länkar till sida som visar hur det går till, samt fonter du kan använda.
Mystiskt, när jag körde ovanstående kod i dag lyckades jag inte få imagechar() att skriva ut å. Det går ju ihop med det ni skriver, men samtidigt skulle jag nästan kunna ta gift på att kodsnutt #2 fungerade igår. Måste ha varit väldigt trött :)...
Nu är iaf. problemet löst, använde imagettftext() istället för imagechar().