2011-03-16 53 views
0
perl -e 'binmode(STDOUT, ":utf8"); \ 
    print "\x{201C}Unicode \x{2018}\x{263A}\x{2019} Please\x{201D}";' |\ 
     convert -background lightblue -fill blue -pointsize 36 \ 
       label:@- label_unifun.gif 

我想跟随ImageMagick文档来实现在PHP中相同的结果。但是,迄今为止没有结果。这是我的:PHP的ImageMagic Unicode字符

$draw = new ImagickDraw(); 
$draw->setTextEncoding('UTF-8'); 
$draw->setFontSize(52); 

$draw->setFont("font.otf"); 
$draw->setStrokeAntialias(TRUE); 
$draw->setTextAntialias(TRUE); 
$draw->annotation(20, 50, "\x{201C}Unicode \x{2018}\x{263A}\x{2019} Please\x{201D}"); 

$canvas = new Imagick(); 
$canvas->newImage(1000, 500, "red"); 
$canvas->drawImage($draw); 
$canvas->setImageFormat('png'); 

header("Content-Type: image/png"); 
echo $canvas; 

但它只是打印\x{201C}Unicode \x{2018}\x{263A}\x{2019} Please\x{201D}

+0

不是一个答案,而是一个解决方法:你有为什么不使用GD2函数而不是ImageMagick? – timdream 2011-03-16 03:16:21

+0

@timdream:GD在各方面都比ImageMagick最差 – 2011-03-16 03:21:42

+0

@timdream:我试过了,它没有设法打印一些unicode字符。 – Gajus 2011-03-16 03:23:05

回答

0

PHP将做到这一点传递到ImageMagick的时候为你逃避,只需要插入您的Unicode字符未逃进你的字符串:

$draw->annotation(20, 50, "ééèeèeèaèèèààaàaàaààêêêçcçcçc"); 
+1

到目前为止我还无法将一些十六进制转换为字符,例如,'0x2212'应该是一个很长的短划线。 – Gajus 2011-03-16 03:47:56

0

我使用命令行工具,接受一个标题/标签中间文件是使用file_put_contents()创建的,以支持UNICODE字符。

file_put_contents($textFilename, $text); 

$cmd = "convert -size ".WIDTH."x".HEIGHT." -background ".BACKGROUND_COLOR_TTI." -fill ".TEXT_COLOR_TTI." -pointsize ".FONT_SIZE_TTI." -gravity  center caption:@".$textFilename." ".$newFileName;