我拼凑出了以下代码,它差不多能够工作:
请注意,quote_blank.jpg是一个400x400的图像背景,文本是在其上渲染的,并且与php文件位于同一目录中。
问题在于标题只填充了380x250的PseudoImage,并且只有很少的几个短单词。任何长度的内容都只会导致盒子的顶部(或更少)有文本(除了归属注释)。
看起来PseudoImage正在正确工作,但是ImageMagick用于计算字体大小的算法仅设计用于填充宽度,而不是高度。我不知道它如何决定要使用哪个行长(这可能反过来决定字体大小,因此也决定了标题框的行数和垂直覆盖范围)。
所以我的问题是:是否有任何方法可以更改它的计算方式,以便尽可能填满标题框,包括水平和垂直方向?
以下是只有几个单词的示例,显示标题可以达到完整高度: 以下是更典型长度的文本示例,显示它无法垂直填满框:
<?php
$img = new Imagick("quote_blank.jpg");
$txt = new Imagick();
$txt->setBackgroundColor("transparent");
$txt->newPseudoImage(380,250, "Caption:".htmlspecialchars($_GET['quote']) );
$txt->colorizeImage('#468847',1);
$img->compositeImage($txt, imagick::COMPOSITE_OVER, 10, 80);
$draw = new ImagickDraw();
$draw->setFillColor('#468847');
$draw->setGravity(Imagick::GRAVITY_SOUTHEAST);
$draw->setFontSize(25);
$draw->setFontStyle(3);
$img->annotateImage($draw, 5,5,0, htmlspecialchars($_GET['attrib']) );
$img->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $img;
?>
请注意,quote_blank.jpg是一个400x400的图像背景,文本是在其上渲染的,并且与php文件位于同一目录中。
问题在于标题只填充了380x250的PseudoImage,并且只有很少的几个短单词。任何长度的内容都只会导致盒子的顶部(或更少)有文本(除了归属注释)。
看起来PseudoImage正在正确工作,但是ImageMagick用于计算字体大小的算法仅设计用于填充宽度,而不是高度。我不知道它如何决定要使用哪个行长(这可能反过来决定字体大小,因此也决定了标题框的行数和垂直覆盖范围)。
所以我的问题是:是否有任何方法可以更改它的计算方式,以便尽可能填满标题框,包括水平和垂直方向?
以下是只有几个单词的示例,显示标题可以达到完整高度: 以下是更典型长度的文本示例,显示它无法垂直填满框:
$image->newImage(400, 400,'none');
动态地创建一个。 - Mark Setchell