1

我试图用下面的代码用 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/ 被修改为 777 并由 daemon: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'
4

1 回答 1

2

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

“FreeType library is not available” - ImageMagick 使用 FreeType 库来渲染字体,你给了它一个 TTF 来使用,它说 FreeType 没有安装,所以它不能使用字体。安装 FreeType,然后重新安装/重新编译 ImageMagick 以获得 FreeType 支持。

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

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

  • convert -list format:这将向您显示支持的文件类型,查找 TTF,确保它至少具有r--状态,它应该显示类似"TTF* TTF r-- TrueType font (Freetype 2.2.1)"FreeType 是否安装正确。

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

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

于 2012-11-15T18:39:53.830 回答