我在特定位置X和Y的图像中放置了一些文本。我也尝试像在Photoshop上的框中那样对齐文本,但是当我使用$ draw-> setTextAlignment()时,我得到了一个不同的结果。见下文:
当前结果:
期望的结果:
文本及其属性(字体名称,大小,颜色等)是动态的,因此大小可能会有所不同。
有人可以帮我吗?
代码:
<?php
$draw = new \ImagickDraw();
$draw->setStrokeColor(new \ImagickPixel('black'));
$draw->setFillColor(new \ImagickPixel('red'));
$draw->setStrokeWidth(1);
$draw->setFontSize(36);
// First box
$draw->setTextAlignment(\Imagick::ALIGN_LEFT);
$draw->annotation(250, 75, "First line\nSecond Line");
// Second box
$draw->setTextAlignment(\Imagick::ALIGN_CENTER);
$draw->annotation(250, 210, "First line\nSecond Line");
// Third box
$draw->setTextAlignment(\Imagick::ALIGN_RIGHT);
$draw->annotation(250, 330, "First line\nSecond Line");
$draw->line(250, 0, 250, 500);
$image = new \Imagick();
$image->newImage(500, 500, new \ImagickPixel('transparent'));
$image->setImageFormat("png");
$image->drawImage($draw);
header("Content-Type: image/png");
echo $image->getImageBlob();
P.S。这些示例中仅使用垂直线来显示对齐差异。
答案 0 :(得分:0)
我找到了解决方案!查看结果图片和说明:
我们可以使用$draw
查询Imagick::queryFontMetrics
对象,以便了解文字的宽度和高度 - 它还会返回此目的不需要的其他信息,请参阅:
X坐标是ImagickDraw::annotation
的第一个参数,用于指定文本在水平轴上的绘制位置。
使用我们手中的文字宽度(textWidth
),我们可以计算出正确的文本 X坐标,为每个文本对齐执行以下操作:
查看实际操作中的代码:
<?php
$image = new \Imagick();
$draw = new \ImagickDraw();
$draw->setStrokeColor(new \ImagickPixel('black'));
$draw->setFillColor(new \ImagickPixel('red'));
$draw->setStrokeWidth(1);
$draw->setFontSize(36);
$text = "First line\nSecond Line";
// First box
$draw->setTextAlignment(\Imagick::ALIGN_LEFT);
$draw->annotation(250, 75, $text);
// Second box
$draw->setTextAlignment(\Imagick::ALIGN_CENTER);
$metrics = $image->queryFontMetrics($draw, $text);
$draw->annotation(250 + ($metrics['textWidth'] / 2), 210, $text);
// Third box
$draw->setTextAlignment(\Imagick::ALIGN_RIGHT);
$metrics = $image->queryFontMetrics($draw, $text);
$draw->annotation(250 + ($metrics['textWidth']), 330, $text);
$draw->line(250, 0, 250, 500);
$image->newImage(500, 500, new \ImagickPixel('transparent'));
$image->setImageFormat("png");
$image->drawImage($draw);
header("Content-Type: image/png");
echo $image->getImageBlob();
输出正确对齐文本的图像。
有关详细信息,请参阅以下参考资料: