Reputation: 1015
I try to adding text on animated gif with ImageMagick :
$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 ?
Upvotes: 1
Views: 4099
Reputation: 1015
Finally found :
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);
Upvotes: 3
Reputation: 207425
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.
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
I don't tend to use PHP, but there appear to be methods matching the above functionality:
Imagick Imagick::coalesceImages ( void )
bool Imagick::optimizeImageLayers ( void )
Upvotes: 2