次のコードを使用して、PHPとImagickを使用して複数の画像を1つのアニメーションGIFに収集するコードを記述しています。
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
$anim = new Imagick();
for($i = 0; $i<=36; $i++) {
$bgImage = new Imagick('Background.gif');
$imagick = new Imagick("sw_layers-$i.gif");
$bgImage->setImageColorspace($imagick->getImageColorspace());
$bgImage->compositeImage($imagick, imagick::DISPOSE_PREVIOUS,0,0);
$draw = new ImagickDraw();
/*** set the fill color ***/
$draw->setFillColor( new ImagickPixel( "orange" ) );
$draw->annotation( 10, 10, 'Hello world');
$bgImage->drawImage( $draw );
$anim->addImage($bgImage);
$anim->setFormat("gif");
$anim->setImageDispose(3);
$anim->setImageCompression(imagick::COMPRESSION_JPEG);
$anim->setImageCompressionQuality(50);
}
echo $anim->writeImages('Result.gif', true);
?>
フレームごとに背景画像と「Helloworld」が表示されることになっています。ご覧のとおり、テキスト画像、背景画像、レイヤーを1つのフレームに結合しています。レイヤー画像には、背景が透明なある種の描画が含まれているため、その場合は、提供された背景とテキストが表示されます。ただし、問題はアニメーションGIF「result.gif」のファイルサイズにあり、30フレームの画像で約3MBであることがわかります。
問題は、品質にそれほど影響を与えずにファイルサイズを小さくするにはどうすればよいですか?システムでコマンドラインツールを実行するなど、回答を受け付けています。
ありがとう