我尝试使用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);
但是使用此代码,图像不再是动画,质量非常糟糕,任何想法?
答案 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 )
bool Imagick::optimizeImageLayers ( void )
答案 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);