サイトを更新しています。 数日間、レイアウトや翻訳に不具合が出ることがあります。ドキュメントは引き続きご利用いただけます。表示が崩れている場合は、後ほど再読み込みしてください。

ホーム image 3.x アニメーション

アニメーション

3.x 2026年3月7日

Intervention Image に含まれる両方のドライバーは、デフォルトでアニメーションをサポートします。ただし、GD ドライバーは標準ではアニメーションをサポートしていないため、追加のリソースを必要とします。

アニメーションをまったく処理するつもりがない場合は、リソース節約のためにこの処理を Image Manager の設定で事前に無効化 できます。

#アニメーションの作成

#異なるソースからアニメーションを作成する

アニメーション作成プロセスの詳細は インスタンス化 の章を参照してください。

#アニメーションの検出

#現在の画像インスタンスがアニメーションか確認する

public Image::isAnimated(): bool

画像がアニメーションの場合は true を返します。そうでない場合は false を返します。

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(Driver::class);

// true
$result = $manager->read('images/animation.gif')->isAnimated();

#アニメーションの編集

#アニメーションフレーム数を読み取る

public Image::count(): int

アニメーションフレームの数を読み取ります。ImageInterface::classCountable::class を継承しているため、画像オブジェクトを count() 関数で扱うこともできます。

#

use Intervention\Image\ImageManager;

// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = ImageManager::gd();

// アニメーションGIFを読み込む
$image = $manager->read('images/animation.gif');

// アニメーションフレームの数を読み取る
$count = $image->count();

// count() 関数でも同じ結果
$count = count($image);

#アニメーションフレームを変更する

public Image::sliceAnimation(int $offset, null|int $length = null): ImageInterface

指定した値に基づいてアニメーションフレームを抽出し、残りを破棄します。offset パラメータは新しいアニメーションの開始位置を設定するために使えます。オフセットより前のフレームはすべて破棄されます。length パラメータは省略可能で、オフセットの後に読み取るフレーム数を指定します。デフォルトではアニメーションの末尾までのすべてのフレームを読み取ります。

#パラメータ

Name Type 説明
offset integer 新しいアニメーションの開始位置
length null or integer オフセットの後に読み取るフレーム数(省略可)

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(new Driver());

// アニメーションGIFを読み込む
$image = $manager->read('images/animation.gif');

// 最初の20フレームを破棄し、次の10フレームを新しいアニメーションとして読み取る
$image = $image->sliceAnimation(20, 10);

#アニメーションの反復回数を読み取る

public Image::loops(): int

アニメーション画像の反復回数を読み取ります。0 は画像が継続的にループすることを意味します。

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;

// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(new Driver());

// アニメーションGIFを読み込む
$image = $manager->read('images/animation.gif');

// アニメーションの反復回数を取得する
$count = $image->loops();

#アニメーションの反復回数を変更する

public Image::setLoops(int $count): ImageInterface

アニメーションのループ回数を変更します。0 に設定すると継続的にループします。

#パラメータ

Name Type 説明
count integer アニメーションの反復回数

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(new Driver());

// アニメーションGIFを読み込む
$image = $manager->read('images/animation.gif');

// アニメーションを1回だけ実行する
$image = $image->setLoops(1);

#アニメーションを削除する

public Image::removeAnimation(int|string $position = 0): ImageInterface

指定した位置のフレームだけを残し、それ以外のフレームを破棄してアニメーション画像を静止画像にします。

position は整数または文字列で指定できます。整数の場合は 0 から始まる正確なフレーム番号が残るフレームとして使われます。文字列値は 0% から 100% のパーセンテージで指定する必要があり、残るフレーム番号は概算で決まります。

position を整数で指定した場合、指定したフレームが存在しなければ例外が投げられます。パーセンテージ指定では常にフレームが見つかるためこの制約はありません。

#パラメータ

Name Type 説明
position integer or string 残すフレームの位置

#

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(new Driver());

// アニメーションGIFを読み込む
$image = $manager->read('images/animation.gif');

// 位置5のフレームを表示する静止画像に変換する
$image = $image->removeAnimation(5);

// 全体の25%の位置のフレームを選んで同じことを行う
$image = $image->removeAnimation('25%');