对于某些动画 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()
,等等。但没有任何效果。我只能保存帧差数据,而不是视觉预期的数据。