PHP + GDを使用してアニメーションGIFのサイズを変更する

良い一日。



まず、小さな紹介。

私自身のプロジェクトの開発中に、ImageMagickソフトウェアパッケージを使用せずに、PHPのみを使用してGIFファイルのサイズを変更するタスクに直面しました(理由はわかったと思います)。 問題がある場合、あまり注意を払わずに解決する必要があります。私はインターネットに行き、関数またはクラスの形式で実装されたスクリプトを探しました。 そして驚いたことに(サイズ変更は明確でなければならないので)、私は2つのPHPスクリプトしか見つけませんでしたが、著者はこの非自明なタスクを実装しようと試みました(他の言語については通常、ImageMagick以外の選択肢がないだけです)。



-最初のスクリプト:GIF画像のサイズを変更する方法を教えるために、GIFアニメーションを生成するために使用された2つのクラスGIFDecoder.class.phpとGIFEncoder.class.phpを教える試み。 その結果、エンドユーザーはデータを操作するためにほぼ3番目のクラスを作成する必要があり、レビューで判断すると、半分しか成功しません。 しかし、これは主なことではありませんが、主なことは、多くのファイルのサイズ変更が正しくないことです(透明性、回転、フレーム処理などの問題)。これらのファイルが多数あるため、タスク、 著者のページへのリンクに適していません



-2番目のスクリプト:gifresizer.phpクラスはすでにより統合され、特殊で使いやすく、今日のインターネットで最高と考えられていますが、このクラスでの実験では、グラフィックデータの最適化を行うGIFファイルの処理に問題があることがわかりました。パレットの誤った作業と同様に、最悪の事態は、いくつかのGIFファイルからスクリプトが無限ループに入り、作成者がクラスページへのリンクを正直に書いていることです



上記の理由のうち、1つのクラスが自然に登場したわけではありません。 どうする?!!! 少し考えた後、私は袖をまくり、しばらくの間メインプロジェクトを延期し、未実現のクラス、つまりGIFファイルの完全かつ最も重要な正しいサイズ変更のためのクラスを実装することにしました。 長い間1つだけお伝えすることはありません。タスクは本当に重要な複雑さでした。すべては、GIFファイルの洗練された構造が標準化されているという事実によるものですが、標準に準拠する人はほとんどいません。より正確には、標準は標準に準拠していません。



開発の過程で、コードは3回書き直され(この感謝のないタスクを放棄することも考えられました)、その結果、 GIF_eXG透過性をサポートするアニメーションGIFファイルのサイズを変更するクラスが登場しました。 このクラスの特徴は、高速で安定した正しい操作と使いやすさです。 さらに、クラスはソースファイルを列挙(読み取り:エラーを修正)して、標準に少なくともほぼ一致するようにします。その結果、Windowsでは、サイズ変更後にアニメーション(このOS)に問題があるファイルで、アニメーションが正しく再生されます。



構造の手動分析と各ビットの分析を実行しましたが、GDライブラリのグラフィックファイルを分析する機能に頼ることはありませんでした。 それ(GDライブラリ)は、単一のフレームのサイズを変更するためにのみ接続されていました。 GDライブラリを使用して1つのフレームのサイズを変更すると、1つのグリッチ(通常は50〜70のサイズ変更に対して1)が接続されます。



クラスの使用例:



require_once "gif_exg.php";



$ nGif = new GIF_eXG( "../ image / src.gif"、1);

$ nGif-> resize( "../ image / dst1.gif"、180,180,1,0);

$ nGif-> resize( "../ image / dst2.gif"、150,150,0,0);



私はすべてが明確だと思います、渡されたパラメータに関するコメントはほんのわずかです:

-コンストラクターでは、2番目のパラメーターは構造の最適化を担当します。(1)の場合、出力ファイルのサイズがよりコンパクトになり、(0)の場合、元の構造全体が保存されます。

-唯一の開いているサイズ変更機能では、4番目のパラメーターは対称性を観察するか(1)しないか(0)を示します。

-5番目の実験パラメーター:(1)ピクセルの補間を試みる、(0)補間なし(推奨);



クラスの適用場所:アニメーション化されたアバター、プレビュー、画像ギャラリーなどの作成



このファイルには、国際社会向けの壊れた英語の指示(事前に謝罪、外国語の問題)が含まれています。理解できると思います。



クラス参照( 現在のバージョン1.07 ):



クラスGIF_eXG(PhpClasses)

クラスGIF_eXG(GitHub)



All Articles