PHP中的ImageMagick标题未填充垂直尺寸

PHP中的ImageMagick标题未填充垂直尺寸,php,imagemagick,imagick,caption,Php,Imagemagick,Imagick,Caption,我已经拼凑了以下代码,这些代码几乎可以工作: <?php $img = new Imagick("quote_blank.jpg"); $txt = new Imagick(); $txt->setBackgroundColor("transparent"); $txt->newPseudoImage(380,250, "Caption:".htmlspecialchars($_GET['quote']) ); $txt->colorizeImage('#468847',

我已经拼凑了以下代码,这些代码几乎可以工作:

<?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伪图像。任何长度的内容都只会导致框的上半部分(或更少部分)包含任何文本(属性注释除外)

伪图像似乎工作正常,但ImageMagick计算字体大小的算法只用于填充宽度,而不是高度。我不知道它是如何决定行长的(这可能反过来决定字体大小,从而决定标题框的行数和垂直覆盖)

所以我想我的问题是:有没有办法改变它的计算方式,以尽可能多地填充标题框,水平和垂直

仅几个单词的示例,显示标题可以完全显示:


一个更典型的文本长度示例,显示它没有垂直填充框

我使用ImageMagick 6.8.9-8测试了您的代码,得到了以下输出,这比您得到的要好。如果您使用的是旧版本,请尝试更新ImageMagick


维尼修斯·平托一下子就找到了正确的答案。但是在共享服务器上更新并不容易——我还没有弄明白如何让Imagick使用更新的版本。所以我不得不重写代码,通过命令行访问ImageMagick,我想与大家分享。就我在评论中所能看到的而言,代码显示得并不好,所以很抱歉对答案功能进行了一点欺骗

$location='/home/user/local/bin/convert';
$command='convert -background none -size 380x250 -fill "#468847" caption:"'.htmlspecialchars($_GET['quote']).'" quote_blank.jpg +swap -gravity southeast -geometry +10+80 -composite convert -fill "#468847" -gravity southeast -pointsize 25 -annotate 0x20+5+5 "'.htmlspecialchars($_GET['attrib']).'" anno_label.jpg';
exec ($location . ' ' .$command);
header('Content-Type: image/jpeg');
readfile('anno_label.jpg');
unlink('anno_label.jpg');

您使用的是哪个版本的Imagick和PHP?有了PHP 5.6.2和Imagick 3.1.2,我得到了一个更好的结果:ImageMagick:6.6.9-7 2014-03-06 Q16 PHP:5.3.27我有ImageMagick 6.8.9-8,尝试更新。除了从文件中读取空白画布外,你还可以用
$image->newImage(400,'none')“动态”创建一个画布@Vinicius我现在正试着这么做,我边走边学习。我和DreamHost在一个共享的Ubuntu服务器上,由于我现有的CMS存在一些问题,目前还无法升级到PHP5.4。因此,ImageMagick和Imagick的版本是预先安装的。我以前没有意识到ImageMagick和Imagick是不同的,但现在我想我明白了Imagick是在后端使用ImageMagick的PHP扩展。所以我想我需要同时更新ImageMagick和Imagick?或者只是更新ImageMagick就行了,假设现有的Imageck只会使用新的库。。。?