百科问答小站 logo
百科问答小站 font logo



为什么有的GIF图片只会播放一遍,而有的会重复播放? 第1页

  

user avatar   liu-ji-27-94 网友的相关建议: 
      

答主@王泰 已经说的很详细了。网上制作循环GIF图一般使用PS软件,我这里补充一段将不循环的GIF图转为循环的Python代码,对于程序员们更友好和便捷。

这个问题是有实际场景的:知乎目前的文章只允许插入1MB大小以内的GIF图,而大多数表情包之外的动图都超出了这个大小,这时就需要对GIF的尺寸进行裁剪,或者进行抽帧。在Mac自带的预览功能里可以直接完成这两个操作,但代价就是原本循环播放的GIF变得只动一次了。使用以下代码:

       from PIL import ImageSequence, Image import imageio, os   location = "/path/to/"  # 文件目录 gif_file = os.path.join(location, "origin.gif")  # 输入GIF文件名 out_file = os.path.join(location, "output.gif")  # 输出GIF文件名  # 这里如果想使用灰度图,可以使用`.convert("L")`代替,参考https://pillow-cn.readthedocs.io/zh_CN/latest/handbook/concepts.html#mode frames = [frame.copy().convert("RGBA") for frame in ImageSequence.Iterator(Image.open(gif_file))] imageio.mimsave(out_file, frames, 'GIF', duration=0.5)  # duration表示两帧之间播放的间隔时间,也可不设,使用默认     

再添加一些逻辑,可以将不循环的GIF图批量转为循环的。在GIF的保存时,不要使用网上流行的这种(可能会影响循环):

       frames[0].save("out.gif", save_all=True, append_images=frames[1:])     

另外,也可以针对知乎的这个1MB场景,配合以上代码,写一个自动的GIF压缩程序~


user avatar   wang_tai 网友的相关建议: 
      

我们现在说的GIF图片全称是Graphics Interchange Format,是一种256色的图片压缩(LZW协议)文档,主要用来存储动态图片。GIF图片有两种格式分布是1987年的GIF87a和1989年GIF89a版本。

其中GIF89a扩展了图形控制区块备注说明应用程序接口等四个区块,并提供了对透明色多帧动画的支持[1]。这也是我们现在最广为使用的协议。

GIF89a 设定部分属性如下图所示[2]

1995年Netscape 为了让GIF可以更好的支持动画和视频剪辑,GIF89a又增加了图像控制扩展功能(Graphics Control Extension (GCE)),每个frame的图片都可以添加GCE部分,用来描述frame之间的延迟时间和循环次数。[3]

上图中 31D行,定义的就是重复播放次数。

所以,如果你的GIF动画不循环播放,一种可能是GCE设置成了1就是只播放一次;第二种可能是你的GIF动画中没有GCE部分。要是GIF动画没有GCE,那就要看播放GIF动画的工具是怎么处理默认逻辑了,有可能只播放一次,也有可能循环播放。

参考

  1. ^ https://zh.wikipedia.org/wiki/GIF
  2. ^ https://en.wikipedia.org/wiki/GIF
  3. ^ https://medium.com/the-world-in-venn/is-the-gif-playing-when-no-one-looks-308b3d3e285c



  

相关话题

  加了第一个同步不是会全部代码执行完吗,为什么出现死锁? 
  为什么很多人都说 Java 和 C++ 不适合用 vim 开发? 
  面向对象中,平行继承体系是否尽量完全抛弃? 
  为什么jdbc:Access的url需要三个///符号呢? 
  C# 发明者与 Java 有关系么? 
  Java 为什么不支持多继承? 
  程序员开发无代码平台成功后会不会被开除? 
  i2c为什么会有TR和TF上升沿和下降沿时间最小时间限制? 
  为什么 Java 份额那么高,在知乎的存在感却不如 Python? 
  java的引用明明和指针没什么本质区别,java为什么还宣称没有指针并把这个当作语言的优点? 

前一个讨论
如何去阅读并学习一些优秀的开源框架的源码?
下一个讨论
请大家看看我的现代诗怎么样?





© 2024-09-19 - tinynew.org. All Rights Reserved.
© 2024-09-19 - tinynew.org. 保留所有权利