Используйте два разных шрифта в imagemagick на одной строке

Поэтому я хочу нарисовать свой текст изображения, чтобы сказать в этом примере «Trevor, 24»

Но я хочу использовать шрифт Helvetica для Trevor, а для 24 я хочу использовать шрифт Arial. Но я хочу, чтобы она была на одной линии и выглядела так, как будто она одна.

Возможно ли, или как я могу сделать это так, чтобы даже если я изменил имя и возраст, я могу распечатать его так?

«Тревор, (Helvetica) 24 (Ариэль)»

Я предположил бы напечатать их рядом с eachother, но если кто-то введет имя дольше, чем 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']; } 

Используйте два разных шрифта в imagemagick на одной строке

Конечно, приведенный выше пример может быть упрощен и сокращен.

Вы можете посмотреть на использование Pango с ImageMagick. Я знаю, что он работает в командной строке, но никогда не пробовал с привязкой PHP …

 convert \ pango:'<span font="Times 48" foreground="white" background="blue">Trevor</span><span font="Arial 32" foreground="yellow" background="black">24</span>' \ pango.png 

введите описание изображения здесь