php - Imagick 在指定区域的图像上居中放置文本

标签 php imagick

我正在使用 Imagick 库在图像上添加文本。 我已经在图像 from x:280 to x:400 上定义了区域 我正在该区域写入文本,并且我想将该文本居中对齐,以下代码将居中文本 x:1 和 x:400

$draw = new ImagickDraw();
$draw->setFillColor('white');
$draw->setFont($tffFile);

$draw->setTextAlignment(Imagick::ALIGN_CENTER);
$draw->setFontSize( 14 );
$image->annotateImage($draw, 280, 80, 0, 'Hey there');

最佳答案

为了使文本在感兴趣的区域内居中,您需要在应用 Imagick::annotateImage 之前负责计算坐标。幸运的是Imagick::queryFontMetrics已经为此提供了解决方案,正如您所观察到的,使用 setTextAlignment 更有可能使事情变得复杂而不是有帮助。

// Given a basic pseudo image.
$image = new Imagick();
$image->newPseudoImage(400, 400, 'PLASMA:');

// Let's define a ROI rectangle.
$rect = [
    'x' => 225,
    'y' => 225,
    'h' => 100,
    'w' => 100,
];

// Draw a Region-of-interest for reference.
$roi = new ImagickDraw();
$roi->setStrokeColor('RED');
$roi->setStrokeWidth(2);
$roi->setFillColor('TRANSPARENT');
$roi->rectangle($rect['x'],
                $rect['y'],
                $rect['x'] + $rect['w'],
                $rect['y'] + $rect['h']);
$image->drawImage($roi);

// Define your text-rendering context.
$ctx = new ImagickDraw();
$ctx->setFillColor('WHITE');
$ctx->setFontSize( 14 );

// Query who it will render with the image stack.
$metrics = $image->queryFontMetrics($ctx, 'Hey there');

// Adjust starting x,y as needed to meet your requirements.
$offset = [
    'x' => $rect['x'] + $rect['w'] / 2 - $metrics['textWidth'] / 2,
    'y' => $rect['y'] + $rect['h'] / 2 + $metrics['textHeight'] / 2 + $metrics['descender'],
];
// Draw text.
$image->annotateImage($ctx,
                      $offset['x'],
                      $offset['y'],
                      0,
                      'Hey there');
// Write to disk.
$image->writeImage('output.png');

output

自动换行和混合字体的内容会让事情变得更加复杂。

关于php - Imagick 在指定区域的图像上居中放置文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52843171/

相关文章:

php - Codeigniter - 让我的 Controller 更干

javascript - 需要帮助使用 php 删除 xml 中的子项

PHP IMagick RGB 到 CMYK 反转?

php - 使用 Imagick 检测图像是灰度还是彩色

php - 我的 Imagick 代码似乎从未调整大小,但仍然产生清晰的图像

php - CakePHP 在基本路径 (/) 中路由命名参数

php - 使用 slug url 从 mysql 数据库获取文章

php - 随机 MySQL 查询?或者随机化一个结果?

php - 想象一下。将颜色更改为透明

php - Imagick 知道图像尺寸吗? (文件大小)