【问题标题】:Output each individual animated GIF frame as visually intended按视觉预期输出每个单独的动画 GIF 帧
【发布时间】:2012-12-07 03:23:17
【问题描述】:

对于一些动画 GIF,对于后续帧,唯一存储的数据是与早期帧相比的差异。现在,我只是触及了(动画)GIF 数据结构的内部工作的表面,但我相信这是通过所谓的压缩、帧差异或处置(实际上并不完全确定)来完成的。

对于 PHP 使用 Gmagick 或 Imagick,我如何提取每个帧(写出它们),以便不仅提取最小数据,而且还提取该帧的完整表示,因为它是视觉预期的?

到目前为止,我已经用 Gmagick 尝试了以下方法,但没有成功,很遗憾:

// as per this comment:
// http://php.net/manual/en/imagick.setimagedispose.php#95701
// I've tried values in the range 0-4 here:
$img->setImageDispose( 0 ); // $img is animated GIF instance of Gmagick
$frameIndex = 0;
do
{
    $img->setImageIndex( $frameIndex );
    $frame = $img->getImage();
    $frameName = ++$frameIndex . '.gif';
    $frame->writeImage( $frameName, false ); // or:
    // $frame->write( $frameName );
}
while( $img->hasNextImage() );

我也尝试了其他一些方法,例如Gmagick::setImageScene() 等。但没有任何效果。我只能保存帧差数据,不能保存视觉上的数据。

【问题讨论】:

    标签: php frame imagick gmagick


    【解决方案1】:

    我自己发现了如何使用 Imagick:

    $frameIndex = 0;
    $img = $img->coalesceImages();
    foreach( $img as $frame )
    {
        $frameName = ++$frameIndex . '.gif';
        $frame->writeImage( $frameName );
    }
    

    换句话说,Imagick::coalesceImages() 成功了。

    【讨论】:

      猜你喜欢
      • 2012-02-14
      • 2016-03-17
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 2012-06-17
      相关资源
      最近更新 更多