我想在其中绘制一个带有两个字符串的矩形。我想第一个字符串是15pt大小(它的数字),第二个是10pt大小(标签)。可以很容易地将一个尺寸的单个字符串绘制到矩形中,我这样做:
$image = new Imagick('someimage.png');
$draw = new ImagickDraw;
$draw->setGravity(Imagick::GRAVITY_CENTER);
$draw->setfont(__DIR__ . DS . 'TREBUCBD.TTF');
$draw->setfontsize(15);
$draw->annotation(0, 0, '50 points');
$image->drawImage($draw);
这里的想法是让“50分”中的“50”变大。
我尝试使用$ draw-> push()将当前设置推送到堆栈,然后再次设置字体大小和注释,然后两个字符串重叠。我一直试图这样做几个小时。非常感谢任何帮助!
上面的实现是在PHP中实现的,但是我可能会通过使用命令行ImageMagick用法显示它的示例来实现它。
编辑:我已经开始获得奖励,我会奖励用PHP实现的解决方案。
答案 0 :(得分:4)
您可以使用+append选项将两个不同的文本标签水平连接(-append
- 垂直):
convert -background grey -pointsize 15 -fill black label:abc \
-pointsize 10 -fill red label:cdefgh -gravity South +append test.png
这段代码实际上会产生两个大小完全匹配字体的图像(因为没有指定明确的大小),然后这两个图像水平地附加在一起:
再次:自动计算此图片的大小以适合您的标签。您可以使用Imagick::labelImage
和Imagick::appendImages
函数来实现此目的。 (要制作没有背景的图片,您可以指定-backround transparent
,例如通过Imagick::setBackgroundColor
)
之后,带有标签的结果图像可以用你想要的任何东西组成。
答案 1 :(得分:2)
在“点”之前和“50”之后添加足够的空间,以便很好地对齐它们:
<?php
$image = new Imagick('test.png');
$draw = new ImagickDraw;
$draw->setGravity(Imagick::GRAVITY_CENTER);
$draw->setfontsize(30);
$draw->annotation(0, 0, '50 ');
$image->drawImage($draw);
$draw = new ImagickDraw;
$draw->setGravity(Imagick::GRAVITY_CENTER);
$draw->setfontsize(15);
$draw->annotation(0, 0, ' points');
$image->drawImage($draw);
file_put_contents('test.png', $image->getImageBlob());
?>