使用ImageMagick和php在动画gif上添加文本

时间:2014-11-23 11:48:47

标签: php imagemagick

我尝试使用ImageMagick在动画gif上添加文字:

$source = public_path().'/test.gif';
$output = public_path().'/test2.gif';
$text = 'the cake is a lie';

// Create objects
$image = new Imagick($source);

// Create a new drawing palette
$draw = new ImagickDraw();

// Set font properties
$draw->setFont(public_path().'/fonts/Impact.ttf');
$draw->setFontSize(20);
$draw->setFillColor('black');

// Position text at the bottom-right of the image
$draw->setGravity(Imagick::GRAVITY_SOUTHEAST);

// Draw text on the image
$image->annotateImage($draw, 10, 12, 0, $text);

// Draw text again slightly offset with a different color
$draw->setFillColor('white');
$image->annotateImage($draw, 11, 11, 0, $text);

// Set output image format
$image->setImageFormat('gif');

$image->writeImage($output);

但是使用此代码,图像不再是动画,质量非常糟糕,任何想法?

2 个答案:

答案 0 :(得分:1)

您可能希望使用-coalesce方法从GIF帧中删除所有优化,然后对其进行标记,然后使用-layers Optimize对其进行重新动画处理,因为否则会进行各种优化(对于调色板和帧间差异)干扰并降低您的标签质量。

因此,在命令行中,过程如下:

convert animation.gif -coalesce \
      -gravity SouthEast -background white ... <do label here>
      -layers Optimize output.gif

参考See ImageMagick documentation here

我不倾向于使用PHP,但似乎有与上述功能相匹配的方法:

Imagick Imagick::coalesceImages ( void )

documentation

bool Imagick::optimizeImageLayers ( void )

documentation

答案 1 :(得分:1)

终于找到了:

exec('/usr/local/bin/convert '.$source_img.' -font '.$font_location.' -pointsize 14 -draw "gravity south fill black text 0,12 \'some text\' fill white text 1,11 \'some text\' " '.$output_img);