私はGraphicsMagickよりもImageMagickをよく知っています。ImageMagick の場合、次のステートメントが適用されます。
これは、GraphicsMagick でも同じだと思います。
背景説明
元の GIF をidentify
で見ると、各フレームの寸法が同じではないことがわかります。
Qb1m0.gif を識別します
Qb1m0.gif[1] GIF 720x416 720x416+0+0 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[1] GIF 471x122 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[2] GIF 471x121 720x416+160+76 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[3] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[4] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[5] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[6] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[7] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[8] GIF 471x122 720x416+160+76 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[9] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.009
Qb1m0.gif[10] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.000
Qb1m0.gif[11] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.000
Qb1m0.gif[12] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.000
Qb1m0.gif[13] GIF 471x122 720x416+160+76 8 ビット PseudoClass 256c 920KB 0.000u 0:00.000
Qb1m0.gif[14] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.000
Qb1m0.gif[15] GIF 471x123 720x416+160+75 8 ビット PseudoClass 256c 920KB 0.000u 0:00.000
これらのサイズの違いは、ファイル サイズを縮小するためにアニメーション GIF に適用されたフレームの最適化の結果です。
他の最適化も行われており、使用する色の数を減らしています。これらのタイプの最適化は両方とも、-resize
操作とうまく組み合わせられません。
-resize
単一の画像用に設計されており、結果の単一の画像を可能な限り見栄えよくします。これにより、画像に新しい色の値が追加されることがよくあります。これは、厳密に制限されたカラー テーブル (最大 256 色) を使用するという GIF の設計と矛盾しています。アニメーション シーケンスでは、次の画像/フレーム-resize
は、生成された前のものとはまったく異なるカラー テーブルになる場合がありますが、アニメーションを適切に機能させるには、すべてのフレームで共通のカラー テーブルが必要です。
-resize
すべてのフレーム画像を他の画像とは完全に個別に処理し、「フレームの最適化」を考慮しません (共通のキャンバスに配置されたフレームごとに異なる幅と高さを独自のオフセットで作成する傾向があります)。
したがって、サイズ変更された画像は、アニメーション GIF の複数のフレームは言うまでもなく、単一の画像を制限された GIF ファイル形式に保存するには理想的とは言えません。その結果、サイズ変更された画像の色が大幅に減少します。
次に、透明性の問題があります。ほとんどのアニメーション GIF は、透明性を多用しています。透明度は、通常は画像の外観に透明度がまったく必要ない場合でも、圧縮の最適化を達成するためによく使用されます。
この場合何が起こるか:-resize
オーバーレイ画像に半透明のピクセルを作成します。画像が GIF ファイル形式に保存されると、これらのピクセルは完全な透明度または完全な不透明度に変換されます。どちらも、元の色から離れた結果のアニメーションに大きな色の歪みを生じさせます。
一般的な手順
一般的に、アニメーション GIF のサイズを変更する最良の手順は次のとおりです。
アニメーションを合体 (最適化解除) します。これにより、アニメーションのすべてのフレームに対して同じサイズの個々の画像が作成されます。
アニメーションの完全な GIF 最適化シーケンスを実行します。フレームの最適化だけでなく、色の最適化も行います。
「シンプル」コマンド
「単純な」サイズ変更コマンドを実行して運試しするには、次のようにします。
convert \
http://i.imgur.com/Qb1m0.gif \
-coalesce \
-resize 200x200 \
cinema_200.gif
結果:
このコマンドは、フレームの最適化の問題を回避します。これにより、ファイル サイズが大きくなるという犠牲を払って、これに起因する問題が修正されます。
ただし、サイズ変更されたフレームはひどくエイリアシングされるため、エッジに関しては「階段」アーティファクトが表示される場合があります。これは、アンチエイリアシングにはエッジの周りに半透明の色が必要ですが、GIF は-resize
オペレーターによって生成された半透明の色を保存できないためです。