3

当我用 $text 和西班牙语调用下面的代码时,我得到了正确的带有图像的文本,但是当我用加泰罗尼亚语用 $text 调用相同的代码时,我没有在图像中得到正确的文本。我知道西班牙语特殊字符á 和 é有效,但加泰罗尼亚语字符à 和 è无效。

你能帮我纠正这个问题吗?

 <?php
    //$text = "Sándalo Ayurvédicos"; // Text in Spanish 
    $text = "Sàndal Ayurvèdics";  // Text in Catalan
    //$text = utf8_encode($text);
    //$text = utf8_decode($text);
    $img = "sample";
    $im = imagecreatetruecolor(25, 350);
    $black = imagecolorallocate($im, 0, 0, 0);
    imagecolortransparent($im, $black);
    $textcolor = imagecolorallocate($im, 73, 100, 23);
    imagestringup($im, 3, 10, 340, $text,$textcolor);
    imagepng($im, $img.'.png');
    imagedestroy($im);
    $imagename = $img.'.png';
    print '<img src="'.$imagename.'"></img>';
    ?>
4

1 回答 1

2

$string参数在 PHP 中是极其模糊的,因为 PHP 中的字符串不携带编码,PHP 根本没有统一字符串的编码。换句话说,它们是字节数组,不像字符串通常在高级语言中,所有字符串都具有内部统一的 unicode 编码,并且这样的参数不会有歧义。

我从评论中读到该字符串必须在 ISO-8859-2 中,它只支持á但不支持à.

您可以使用imagettftext记录在案的字符串以 UTF-8 编码获取字符串,这很好,因为至少可以绘制所有字符。但它需要 TrueType 字体,我在这里使用 Arial Unicode:

<?php
header("Content-Type: image/png");


$text = "汉语/漢語"; //My PHP is already saved as UTF-8 in text editor - no conversion necessary

$im = imagecreatetruecolor(25, 350);
$black = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($im, $black);
$textcolor = imagecolorallocate($im, 73, 100, 23);

            //270 is the angle, from up-to-bottom
imageTtfText( $im, 12, 270, 10, 10, $textcolor, "./arial_unicode.ttf", $text );
        //12 is font size
//Camel-cased because imagettftext just looks horrible and php is case-insensitive

imagepng($im);
imagedestroy($im);

这是上面代码生成的图像:

http://i.imgur.com/pUxibBf.png

于 2013-04-18T11:22:45.533 回答