【发布时间】:2014-10-29 00:10:03
【问题描述】:
我拼凑了以下代码,几乎可以正常工作:
<?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 计算字体大小的算法仅用于填充宽度,而不是高度。我不知道它是如何决定行长的(这可能会反过来决定字体大小,从而决定标题框的行数和垂直覆盖范围)。
所以我想我的问题是:有没有办法改变它的计算方式,以便尽可能多地填充标题框,水平和垂直?
几个单词的示例,显示标题可以全高:
更典型的文本长度示例,显示它没有垂直填充框
【问题讨论】:
-
您使用的是哪个版本的 Imagick 和 PHP?使用 PHP 5.6.2 和 Imagick 3.1.2 我得到了更好的结果:i.imgur.com/2W2a7ee.jpg
-
ImageMagick: 6.6.9-7 2014-03-06 Q16 PHP: 5.3.27
-
我有 ImageMagick 6.8.9-8,尝试更新
-
与其从文件中读取空白画布,不如使用
$image->newImage(400, 400,'none');“即时”创建一个 -
@Vinicius 我现在正在尝试这样做,并且正在学习中。我在与 DreamHost 共享的 Ubuntu 服务器上,由于我现有的 CMS 存在一些问题,因此无法升级到 PHP 5.4。所以 ImageMagick 和 Imagick 的版本是预装的。之前我没有意识到 ImageMagick 和 Imagick 是不同的,但现在我想我明白 Imagick 是在后端使用 ImageMagick 的 PHP 扩展。所以......我想我需要同时更新 ImageMagick 和 Imagick?或者只是更新 ImageMagick 工作,假设现有的 Imagick 将只使用新库......?
标签: php imagemagick imagick caption