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

发布于 2024-11-07 18:06:10 字数 529 浏览 3 评论 0原文

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

我已经可以使用 GD 做到这一点,但它不能处理字符相互重叠的字体。

所以现在我正在寻找 ImageMagick。我在文档中找到了一个示例,它似乎可以满足我的要求。这可以用 php_magick 实现吗?特别是没有定义图像大小的部分:)如果没有,我可以让命令行 magick 输出原始图像,这样我就可以用 PHP 将它直接传递给客户端吗?

谢谢!


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

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

I want to dynamically render text to an image with a custom font, preferably with the option to output directly or save to a file. And to automatically set the image size according to the font/size combination.

I can already do this with GD, but it doesn't handle fonts where characters overlay each other.

So now I'm looking to ImageMagick. I've found an example in the docs that seem to do what I want. Is this possible with php_magick? Especially the part where no image size is defined :) If it is not, can I make command-line magick output the raw image, so I can pass it directly to the client with PHP?

Thanks!


The real question probably is: How do I convert the IM command below to PHP code using php_magick?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花之痕靓丽 2024-11-14 18:06:10

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

这是该文档的直接复制粘贴:

<?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;

You should be able to use the annotateImage function of the Imagick class to duplicate that functionality.

Here's a straight up copy-paste from 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;
御弟哥哥 2024-11-14 18:06:10

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

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

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

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

Decided to skip the API and use the command-line interface instead.

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

This returns the raw PNG data, which we can then output to the browser. Replace png:- with the filename to save to a file instead.

Don't forget to use escapeshellarg if you are using user input as parameters here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文