我尝试使用以下代码创建带有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'
答案 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。