php imagick gif,php – Imagick:从动画GIF中删除帧?

我已经浏览了

Imagick文档了一段时间,并尝试了几件事……但我没有设法做你想做的事 – 所以,我们至少有两个人找不到了干净的方式^^

无论如何,我设法删除动画GIF图像的帧的唯一方法是创建一个新的,只包含我不想删除的帧:-(

考虑到我以这种方式加载图像:

// Load the existing image

$image = new Imagick(dirname(__FILE__) . '/animated-gif-source.gif');

(这是一个动画gif,有3帧;我想“删除”第二个).

正如我所说,我发现“删除框架”的方法就是这样:

$new_image = new Imagick();

$i = 1;

foreach ($image as $frame) {

if ($i===1 || $i===3) {

// 3 frames ; we keep the first and third one

// ie, remove the second one

$new_image->addImage($frame->getImage());

}

$i++;

}

所以:

>创建一个新图像

>迭代原始帧的帧

>如果当前帧是我想保留的帧,则将其复制到新图像

并且,最后,将图像输出到浏览器:

// To directly output to the browser

header('Content-Type: image/gif');

echo $new_image->getImagesBlob();

或者,将其写入文件:

// To write the new image to a file

// Must use writeImages, and not writeImage (multi-frames ! )

$new_image->writeImages(dirname(__FILE__) . '/animated-gif-output.gif', true);

这些输出中的每一个仅包含第一帧和第三帧;所以,它的工作……

但是,正如你所说,感觉并不好:-(

我认为它对大多数图像都可能正常工作;你可能会遇到大图像的麻烦,但动画GIF通常不是那么大……是吗?

其他方式可能是从命令行使用转换……但是……不是很好,我没有找到一种方法来删除框架与这些:-(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值