编程语言
首页 > 编程语言> > php – 在imagemagick中使用两行不同的字体

php – 在imagemagick中使用两行不同的字体

作者:互联网

所以我想借鉴我的图像文字,在这个例子中说“Trevor,24”

但我想使用Helvetica字体为Trevor,而对于24我想使用字体Arial.但我希望它在同一条线上,看起来像是一条线.

是否有可能或者我将如何制作它以便即使我改变名称和年龄,我可以像这样打印出来?

“特雷弗,(Helvetica)24(阿里尔)”

我会假设将它们打印在彼此旁边,但是如果有人输入的名字比Trevor 24更长,那么就会过去.

我们的想法是让它在同一条线上

你们有什么感想?

$draw = new ImagickDraw();
$color = new ImagickPixel('#5b5b5b');
$bgcolor = new ImagickPixel('none');
$font = 'Helvetica';
//$draw->setFont($font);
//$draw->setFontSize(39);
$draw->setFillColor($color);
$draw->setStrokeAntialias(true);
$draw->setTextAntialias(true);

$draw->setFont($font);
$draw->setFontSize(39);

$text = 'Trevor, 24';

$draw->setGravity(Imagick::GRAVITY_WEST);
$image->annotateImage($draw, 50, 241, 0, $text);

解决方法:

这很容易,但你必须做一些工作.使用Imagick::queryFontMetrics跟踪每种字体的绘图宽度,并简单地偏移到X坐标以确保对齐均匀.

// Let's create a generator to simplify context management (YMMV)
function context_generator() {
    $text = array('Trevor (Helventica)',' 24 (Impact)');
    $font = array('Helvetica', 'Impact');
    foreach($text as $k => $v ) yield [$font[$k], $v];
}
$image = new Imagick();
$image->newImage(450, 100, "steelblue", "png");
$draw = new ImagickDraw();
$draw->setFillColor('black');
$draw->setStrokeAntialias(true);
$draw->setTextAntialias(true);
$draw->setFontSize(24);
$x = $y = 40;
foreach(context_generator() as $attr) {
    // Set context typeface
    $draw->setFont($attr[0]);
    // Calculate how big this type face will be (and any validation to protect overflow)
    $metrics = $image->queryFontMetrics($draw, $attr[1], FALSE);
    // Draw part
    $image->annotateImage($draw, $x, $y, 0, $attr[1]);
    // Offset origin X
    $x += $metrics['textWidth'];
}

Use two different fonts in imagemagick on one line

当然,上面的例子可以简化&降低.

标签:imagemagick-convert,imagick,php,imagemagick
来源: https://codeday.me/bug/20191007/1867027.html