如何使用PHP Imagick创建弯曲文本?

时间:2015-10-10 09:26:10

标签: php imagemagick imagick

如何使用Imagick(PHP)获取弯曲文本? 我没想到不会为此找到一个简单的方法或一组方法,但它发生了......

我确实找到ImageMagick命令来获取弯曲文本(http://www.imagemagick.org/Usage/fonts/#arch),但我需要一个基于Imagick(PECL扩展)的脚本。

2 个答案:

答案 0 :(得分:1)

如果你只是想弯曲它,那么下面的代码就是demo here

<svg width="100%" height="100%" viewBox="0 0 1000 300"
     xmlns="http://www.w3.org/2000/svg" 
     xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <path id="MyPath"
          d="M 100 200 
             C 200 100 300   0 400 100
             C 500 200 600 300 700 200
             C 800 100 900 100 900 100" />
  </defs>

  <use xlink:href="#MyPath" fill="none" stroke="red"  />

  <text font-family="Verdana" font-size="42.5">
    <textPath xlink:href="#MyPath">
      We go up, then we go down, then up again
    </textPath>
  </text>

  <!-- Show outline of the viewport using 'rect' element -->
  <rect x="1" y="1" width="998" height="298"
        fill="none" stroke="black" stroke-width="2" />
</svg>

如果你真的希望它沿着一条路走,那么我认为你不能在Imagick。您需要创建一个SVG文件并将其转换为PNG并将其覆盖在图像上从https://developer.mozilla.org/en/docs/Web/SVG/Element/textPath

获取的文本路径示例
{{1}}

还需要一个支持textpath的SVG转换器。 ImageMagick内置的那个显然不支持textpath。

答案 1 :(得分:0)

据我所知,没有创建弯曲文本的直接方法,但您可以按照以下步骤进行操作。

$draw = new ImagickDraw();
$draw->setFont('Sans.ttf');
$draw->setFontSize(20);
$draw->setStrokeAntialias(true);
$draw->setTextAntialias(true);
$draw->setFillColor('#ff0000');


$text = new Imagick();
$text->newImage(300, 300, "red");
$text->setImageFormat('png');
$text->annotateImage($draw, 30, 40, 0, 'Jitendra Kumar');

$text->trimImage(0);

$text->setImagePage($text->getimageWidth(), $text->getimageheight(), 0, 0);

$distortPoints = array( 120 );
$text->setImageVirtualPixelMethod( Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);


$text->setImageMatte( TRUE );
$text->distortImage(Imagick::DISTORTION_ARC, $distortPoints, FALSE);

$text->setformat('png');

header("Content-Type: image/png");
echo $text->getimageblob();

一旦你的问题没有解决,请告诉我。