(PHP)Imagick创建的gif动画:设置帧处理?
我希望每一帧都能被重新画出来,没有之前的帧被画在后面。我目前的代码是:(PHP)Imagick创建的gif动画:设置帧处理?,php,animation,gif,imagick,Php,Animation,Gif,Imagick,我希望每一帧都能被重新画出来,没有之前的帧被画在后面。我目前的代码是: // $frames is an array of image blobs $durations = array(50, 50, 50, 50) $loops = 0; $big = new Imagick(); $big->setFormat('gif'); for ($i = 0; $i < count($frames); $i++) { $frames[$i]->scaleImage(140
// $frames is an array of image blobs
$durations = array(50, 50, 50, 50)
$loops = 0;
$big = new Imagick();
$big->setFormat('gif');
for ($i = 0; $i < count($frames); $i++) {
$frames[$i]->scaleImage(140, 140);
$frames[$i]->setImagePage(140, 140, 0, 0);
$frames[$i]->setImageDispose(1);
$big->addImage($frames[$i]);
$big->setImageDelay($durations[$i]);
}
$big = $big->deconstructImages();
$big->setImageIterations($loops);
$big->writeImages('test.gif');
/$frames是一组图像斑点
$durations=数组(50,50,50,50)
$loops=0;
$big=新的Imagick();
$big->setFormat('gif');
对于($i=0;$iscaleImage(140140);
$frames[$i]>setImagePage(140,140,0,0);
$frames[$i]>setImageDispose(1);
$big->addImage($frames[$i]);
$big->setImageDelay($durations[$i]);
}
$big=$big->解构图像();
$big->setImageIterations($loops);
$big->writeImages('test.gif');
所有setImageDispose()
设置都没有达到我想要的效果:
setImageDispose(1)
:setImageDispose(2-3)
:- 我已尝试在frame对象和 最终的gif对象和两者具有相同的结果(如上)
- 我尝试了
但没有成功,但可能是我用错了setImagePage()
- 当我的$frames被单独回显时,它们都被完整地绘制出来
- 我找到了解决办法
deconstructImages()
正在以我们在上面的setImageDispose(2-3)
示例中看到的方式优化帧。我的解决方案是为这些tweo函数设置一个切换,因此我可以输出为:
-文件大小更大,但没有重叠帧setImageDispose(1)
-更小的文件大小setImageDispose(2);解构图像()
// $frames is an array of image blobs
$durations = array(50, 50, 50, 50)
$loops = 0;
$dispose = false;
$dispose\u mode=($dispose)?2 : 1;
$big=新的Imagick();
$big->setFormat('gif');
对于($i=0;$isetImageDispose($dispose\u模式);
$frames[$i]>scaleImage(140140);
$big->addImage($frames[$i]);
$big->setImageDelay($durations[$i]);
}
$big->setImageIterations($loops);
$big=($dispose)$大:$big->解构图像();
$big->writeImages('output.gif',true);
$dispose_mode = ($dispose) ? 2 : 1;
$big = new Imagick();
$big->setFormat('gif');
for ($i = 0; $i < count($frames); $i++) {
$frames[$i]->setImageDispose($dispose_mode);
$frames[$i]->scaleImage(140, 140);
$big->addImage($frames[$i]);
$big->setImageDelay($durations[$i]);
}
$big->setImageIterations($loops);
$big = ($dispose) ? $big : $big->deconstructImages();
$big->writeImages('output.gif', true);