使用ImageMagick和PHP使用自定义字体绘制文本

时间:2011-05-16 18:45:35

标签: php imagemagick text-rendering

我想使用自定义字体动态渲染文本到图像,最好使用选项直接输出保存到文件。并且根据字体/大小组合自动设置图像大小。

我已经可以使用GD执行此操作,但它不处理字符相互叠加的字体。

所以现在我正在寻找ImageMagick。我发现an example in the docs似乎做了我想做的事。这可能与php_magick?特别是没有定义图像大小的部分:)如果不是,我可以让命令行magick输出原始图像,所以我可以用PHP将它直接传递给客户端吗?

谢谢!


真正的问题可能是:如何使用php_magick将下面的IM命令转换为PHP代码?

convert -background lightblue -fill blue -font Arial -pointsize 72 label:Anthony

2 个答案:

答案 0 :(得分:10)

您应该能够使用Imagick类的annotateImage函数来复制该功能。

以下是来自that documentation的直接复制粘贴:

<?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('Bookman-DemiItalic');
$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;

答案 1 :(得分:3)

决定跳过API并使用命令行界面。

convert -background lightblue -fill blue -font Arial -pointsize 72 label:Anthony png:-

这将返回原始PNG数据,然后我们可以将其输出到浏览器。将png:-替换为文件名以保存到文件中。

如果您在此处使用用户输入作为参数,请不要忘记使用escapeshellarg