ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-07 12:40:42  阅读:301  来源: 互联网

标签:imagemagick-convert imagick 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有