php代码,完美实现GIF动画缩略图。

php代码,完美实现GIF动画缩略图。
下面是一个从CS GIF动画的热点游戏来说明问题:
GIF动画图片:old.webp

为了使问题更清楚,我们首先恢复动画帧:

选择一:在PHP中使用imagick模块:
复制代码代码如下所示:
< PHP
图像=新imagick美元(老。gif);
$ I = 0;
foreach(美元美元图像帧){
框架- > writeimage美元('old_。$;
}
>

选择二:由ImageMagick转换命令
复制代码代码如下所示:
壳>将old.webp old_ % d.webp
因此,GIF动画的以下帧如下所示:
动画框架示意图

可以清楚地看到,为了压缩GIF动画,第一帧将被用作模板,其余帧应该根据适当的偏移量累积,并且只保留不同的像素。结果是每个帧的大小不一样,造成缩略图的障碍。

下面看看如何完美的imagick PHP模块的GIF动画缩略图:
复制代码代码如下所示:
< PHP
图像=新imagick美元(老。gif);
图像=图像->美元美元coalesceimages();
foreach(美元美元图像帧){
美元thumbnailimage框架>>(50, 50);
}
图像=图像->美元美元optimizeimagelayers();
图像-> writeimages美元(新.webp,真的);
>
在代码中最重要的是coalesceimages方法,使帧的尺寸都是一样的,这是在手册。
复合一组图像,同时尊重任何页面偏移和处理方法。GIF,恼羞成怒,MNG的动画序列通常开始与图像背景和每个后续的图像变化的大小和偏移。返回一个新的imagick对象序列中的每个图像的大小为第一与序列中的下一个图像复合一样。

同时,注重optimizeimagelayers方法,去除重复的像素内容,这是在手册。
比较每个图像的前一个图像的GIF处理形式,它也被称为以下两个方面:第一个是第二个。

顺便说一句:如果你想更完美,你可以使用quantizeimages方法进一步压缩。

注意:无论是coalesceimages或optimizeimagelayers,一切回到新imagick对象!

如果您更习惯于操作shell,那么您可以实现GIF动画缩略图。
复制代码代码如下所示:
壳>将old.webp -合并-缩略图50X50层优化new.webp
生成的new.webp如下:
new.webp

有一个细节问题:转换版本比PHP版本小一点,这是由于API实现不一致造成的。

另外,如果缩略图尺寸不符合原来的比例,为了避免变形,还要考虑剪切或填充,因为本文主要讨论GIF动画的缩略图的特殊性,将不再继续讨论这些问题,对它们的修复感兴趣。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部