gpt4 book ai didi

php - 如何在 PHP 中使用 Imagick 包装文本,以便将其绘制为多行文本?

转载 作者:可可西里 更新时间:2023-11-01 13:02:33 25 4
gpt4 key购买 nike

PHP 中的 Imagick 库允许您在图像上绘制文本。

我如何告诉 Imagick 基于一些有界文本框来包装文本,以便单词显示为多行文本而不是单行?

最佳答案

用法:

list($lines, $lineHeight) = wordWrapAnnotation($image, $draw, $msg, 140);
for($i = 0; $i < count($lines); $i++)
$image->annotateImage($draw, $xpos, $ypos + $i*$lineHeight, 0, $lines[$i]);

功能:

/* Implement word wrapping... Ughhh... why is this NOT done for me!!!
OK... I know the algorithm sucks at efficiency, but it's for short messages, okay?

Make sure to set the font on the ImagickDraw Object first!
@param image the Imagick Image Object
@param draw the ImagickDraw Object
@param text the text you want to wrap
@param maxWidth the maximum width in pixels for your wrapped "virtual" text box
@return an array of lines and line heights
*/
function wordWrapAnnotation(&$image, &$draw, $text, $maxWidth)
{
$words = explode(" ", $text);
$lines = array();
$i = 0;
$lineHeight = 0;
while($i < count($words) )
{
$currentLine = $words[$i];
if($i+1 >= count($words))
{
$lines[] = $currentLine;
break;
}
//Check to see if we can add another word to this line
$metrics = $image->queryFontMetrics($draw, $currentLine . ' ' . $words[$i+1]);
while($metrics['textWidth'] <= $maxWidth)
{
//If so, do it and keep doing it!
$currentLine .= ' ' . $words[++$i];
if($i+1 >= count($words))
break;
$metrics = $image->queryFontMetrics($draw, $currentLine . ' ' . $words[$i+1]);
}
//We can't add the next word to this line, so loop to the next line
$lines[] = $currentLine;
$i++;
//Finally, update line height
if($metrics['textHeight'] > $lineHeight)
$lineHeight = $metrics['textHeight'];
}
return array($lines, $lineHeight);
}

关于php - 如何在 PHP 中使用 Imagick 包装文本,以便将其绘制为多行文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746537/

25 4 0
文章推荐: javascript - 通过 jQuery 设置值后验证字段
文章推荐: php - Magento - 以编程方式禁用自动索引
文章推荐: javascript - 获取
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com