简体   繁体   English

使用ImageMagick和PHP在动画GIF上添加文本

[英]Adding text on animated gif with ImageMagick and php

I try to adding text on animated gif with 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);

But with this code the image is no longer animated and the quality is very bad, any idea ? 但是使用此代码后,图像不再具有动画效果,并且质量很差,您知道吗?

You probably want to use the -coalesce method to remove all optimisations from your GIF frames, then label it and then re-animate it with -layers Optimize , because otherwise the various optimisations (to the palette and inter-frame differences) interfere with, and reduce the quality of, your labelling. 您可能想使用-coalesce方法从GIF框架中删除所有优化,然后对其进行标记,然后使用-layers Optimize重新设置其动画-layers Optimize ,因为否则,各种优化(针对调色板和帧间差异)都会干扰,并降低标签的质量。

So, at the command-line, the process is like this: 因此,在命令行中,过程如下:

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

Reference : See ImageMagick documentation here 参考请参见ImageMagick文档

I don't tend to use PHP, but there appear to be methods matching the above functionality: 我不倾向于使用PHP,但是似乎有一些方法可以匹配上述功能:

Imagick Imagick::coalesceImages ( void )

documentation 文件

bool Imagick::optimizeImageLayers ( void )

documentation 文件

终于找到了 :

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM