在GD中显示从右到左连接的语言(如波斯语和阿拉伯语) - 可能的PHP错误

时间:2014-01-14 07:06:40

标签: php gd

我想用php gd库创建一个带有文本的图像。

一切都很好,但是当我尝试使用imagefttext()从右到左连接语言(如波斯语)写一个单词时,我的文本从左到右呈现(反向)并且字符没有连接更多。

连接字符的示例:ماه 未连接字符的示例:ماه

这是我的代码:

    header('Content-Type: image/jpeg');
    $thumb_path = "...";
    $font_path = "..."
    $img = imagecreatefromjpeg($thumb_path);
    $color = "...";
    // __month is a Persian word :  ( م ا ه -->  ماه )
    $text = $months." ".__month;
    imagefttext($img,29, 10, 230, 135, $color, $font_path, $text); // <--
    imagejpeg($img);

渲染图像:

month

我知道我的问题不是编码。因为我已经尝试过了:

$text = mb_convert_encoding($text, "HTML-ENTITIES", "UTF-8");

结果是一样的。

有一些可用的库可以解决这个问题。我知道大多数人不熟悉波斯语阿拉伯语语言,但我的问题是为什么gd本身不支持对左连接语言的权利?

这可能是gd库中的一个错误吗?

2 个答案:

答案 0 :(得分:8)

似乎没有任何帮助(设置正确的语言环境),原生PHP支持是错误的,这可能是创建第三方包的原因:

使用php-gd-farsi

充当魅力:

enter image description here

只需将库复制到PHP目录(不必是管理员)。用法很简单:

// init:
include('php-gd-farsi-master/FarsiGD.php');
$gd = new FarsiGD();

....
// then convert your text:
$tx = $gd->persianText($str, 'fa', 'normal');

您甚至不必设置正确的区域设置! : - )

整个示例代码:

<?php

include('php-gd-farsi-master/FarsiGD.php');

$gd = new FarsiGD();

// Create a 300x100 image
$im = imagecreatetruecolor(300, 100);
$red = imagecolorallocate($im, 0xFF, 0x00, 0x00);
$black = imagecolorallocate($im, 0x00, 0x00, 0x00);

// Make the background red
imagefilledrectangle($im, 0, 0, 299, 99, $red);

// Path to our ttf font file
//$font_file = './Vera.ttf';
$font_file = './cour.ttf';

// Draw the text 'PHP Manual' using font size 13
$text = imagecreatetruecolor(200, 60);
imagefilledrectangle($text, 0, 0, 200, 60, $red);
$str = '**ماه**';
$tx = $gd->persianText($str, 'fa', 'normal');
imagefttext($text, 24, 10, 10, 50, $black, $font_file,$tx );
$im = $text;

// Output image to the browser
header('Content-Type: image/png');

imagepng($im);
imagedestroy($im);
?>

答案 1 :(得分:0)

您是否正确设置了区域设置?

查看table of locales,波斯语应该是包fa_IR.UTF-8中的波斯语fa_utf8。不要忘记检查它是否也已正确设置:

$rv = setlocale(LC_ALL, "fa_IR.UTF-8");
var_dump($rv);

编辑:尝试了它,但它似乎也无济于事。