【问题标题】:ImageMagick caption in PHP not filling size vertical dimensionPHP中的ImageMagick标题未填充大小垂直尺寸
【发布时间】: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-&gt;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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Vinicius Pinto 马上就有了正确的答案。但是在共享服务器上更新并不是那么容易——我还没有弄清楚如何让 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');
    

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 2021-04-04
      • 2011-10-08
      • 1970-01-01
      • 2021-05-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      相关资源
      最近更新 更多