使用PHP ImageMagick将文本写入图像的问题

时间:2012-11-14 15:59:18

标签: php macos imagemagick zend-server

我尝试使用以下代码创建带有imagemagick的png。

<?php
/* Create some objects */
$image = new Imagick();
$draw = new ImagickDraw();
$pixel = new ImagickPixel( 'gray' );

/* New image */
$image->newImage(800, 75, $pixel);

/* Black text */
$draw->setFillColor('black');

/* Font properties */
$draw->setFont('Oxin_free_promo.ttf');
$draw->setFontSize( 30 );

/* Create text */
$image->annotateImage($draw, 10, 45, 0, 'The quick brown fox jumps over the lazy dog');

/* Give image a format */
$image->setImageFormat('png');

/* Output the image with headers */
header('Content-type: image/png');
echo $image;

但我不断收到以下错误。 / usr / local / zend / tmp /是chmod为777并由守护进程拥有:zend和magick- *不存在。有什么想法吗?

httpd: FreeType library is not available `/Users/gareth.williams/Sites/_tests/texttoimg/Oxin_free_promo.ttf'.
httpd: Postscript delegate failed `/usr/local/zend/tmp/magick-tmfNBDIx': No such file or directory.
PHP Fatal error:  Uncaught exception 'ImagickException' with message 'Unable to annotate image'

1 个答案:

答案 0 :(得分:2)

查看给出的错误消息,它说明问题就在那里。

“FreeType库不可用” - ImageMagick使用FreeType库渲染字体,你已经给它使用了TTF,并且它说没有安装FreeType,所以它不能使用字体。安装FreeType,然后重新安装/重新编译ImageMagick以获得FreeType支持。

第二个错误可能是ImageMagick尝试使用其postscript光栅化支持来回退渲染字体,通常这是通过ghostscript (gs),因此“Postscript委托失败”ghostscript不可用,或者它要求ghostscript进行渲染的临时文件的路径是不可写的。可以通过安装ghostscript并确保临时目录具有完全写入权限来修复,正如人们在问题的评论中提到的那样。

要确认这些原因,请使用转换的-list选项。

  • convert -list format:这会显示支持的文件类型,查找TTF,确保其状态至少为r--,如果FreeType应该说"TTF* TTF r-- TrueType font (Freetype 2.2.1)"之类的内容安装正确。

  • convert -list delegate:这将显示委派类型的处理和使用的命令行。它将使用其中一个ps转换器作为后备。

正如我所说,最简单的解决方法是安装FreeType,然后重新编译/重新安装ImageMagick。