0

私がやりたいことは、アニメーション GIF の最初のフレームのみを静止画像 (非アニメーション GIF) に保存することです。

Gmagick 1.1.2RC1 および GraphicMagick 3.1.18 の使用

私はそれについて話している投稿の山を読みました。以前のバージョンの Gmagick では機能していたが、新しいバージョンでは機能していなかったと言う人もいます。

ここに私の現在のテストコードがあります:

public function testAnimatedGifFrame()
{
    $testAnimGif = $this->assets.'/animated.gif';

    $im = new \Gmagick($testAnimGif);
    $frameNumber = $im->getNumberImages();

    $this->assertEquals(47, $frameNumber, 'The number of frame for the animated GIF should be 47');

    // Select the first frame and save it
    $frameIndex = 0;
    $img = $im->coalesceImages();
    foreach ($img as $frame) {
        die('here');
        $frameName = ++$frameIndex . '.gif';
        $frame->writeImage( $frameName );
    }
}

アニメーション GIF は 47 フレームで構成されていますが、 を使用するcoalesceImages()と、スクリプトが foreach ループに入ることはありません (死ぬことはありません)。

ここで何を見逃したのかわかりません。

4

1 に答える 1

0

私のように Imagick または Gmagick を使用してそれを実行しようとしている人向けです。

JPG と BAM として保存するだけです。

public function testAnimatedGifFrame()
{
    $testAnimGif = $this->assets.'/animated.gif';
    $singleFrame = $this->assets.'/test_single_frame.jpg';

    $im = new \Gmagick($testAnimGif);
    $frameNumber = $im->getNumberImages();

    $this->assertEquals(47, $frameNumber, 'The number of frame for the animated GIF should be 47');

    // Save the image as JPG to disable the animation
    $im->setImageFormat('JPG');
    $im->writeImage($singleFrame);
    $im->destroy();
}

アニメーションの最初の画像ではなく最後の画像を保存したい場合は、$im = $im->flattenImages();前に追加するだけです$im->setImageFormat('JPG');

これがあなたの何人かを助けることを願っています;)

于 2013-05-28T06:12:44.727 に答える