以下は、問題を説明するために CS の警察とギャングのゲームから抜粋した GIF アニメーションです。
問題を明確にするために、まずアニメーションの各フレームを復元します。
オプション 1: PHP で Imagick モジュールを使用します:
コードをコピーします コードは次のとおりです:
< ;?php
$image = new Imagick('old.gif');
$i = 0;
foreach ($image として $frame) {
$frame->writeImage(' old_' . $ i . '.gif');
}
?>
コードは次のとおりです: shell>convert old.gif old_%d.gif
GIFアニメーションの各フレームのイラスト
PHP で Imagick モジュールを使用して GIF アニメーション サムネイルを完全に実装する方法を見てみましょう:
コードをコピーします
コードは次のとおりです。 $image = new Imagick('old.gif');
$image = $image->coalesceImages(); $frame としての画像) {
$frame->thumbnailImage(50, 50);
$image = $image->optimizeImageLayers(); 'new.gif'、true);
コード内で最も重要なのは、各フレームのサイズが一貫していることを保証する coalesceimages メソッドです。マニュアルの言葉では次のようになります。
GIF、MIFF、および MNG アニメーション シーケンスは通常、画像の背景から始まり、後続の各画像のサイズとオフセットが異なる新しい Imagick オブジェクトを返します。シーケンスは最初の画像と同じサイズで、シーケンス内の次の画像と合成されます。
アニメーションの結果を維持しながら、GIF が配置したシーケンス内の前の画像の各画像を比較して、各フレームを置き換える最小のトリミング画像を選択しようとします。ところで: より完璧な表現が必要な場合は、quantizeImages メソッドを使用してさらに圧縮できます。
注: coalesceimages であっても、optimizeImageLayers であっても、新しい Imagick オブジェクトが返されます。
コードをコピー コードは次のとおりです:シェルの操作に慣れている場合は、次のように GIF アニメーションのサムネイルを実装できます:
shell> 変換 old.gif -coalesce -thumbnail 50x50 -layers optimize new.gif
生成された new.gif は次のとおりです:
詳細な問題があります。変換バージョンは php バージョンよりも小さくなります。これは、一貫性のない API 実装が原因です。
また、サムネイルのサイズが元の画像の比率と一致しない場合、変形を避けるためにトリミングやパディングを考慮する必要があります。この記事では主に GIF アニメーションのサムネイルの特殊性について説明しますので、説明しません。これらの問題について議論を続けてください。興味があるなら、自分でやってみてください。