• GIF图像动态生成-JAVA后台生成


    📢📢📢📣📣📣
    哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝
    一位上进心十足的【Java ToB端大厂领域博主】!😜😜😜
    喜欢java和python,平时比较懒,能用程序解决的坚决不手动解决😜😜😜

    ✨ 如果有对【java】感兴趣的【小可爱】,欢迎关注我

    ❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
    ————————————————

    如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

    目录

    简介

    特点

    用途

    实现原理

    python实现GIF图片

    编码



    GIF图片是我们日常生活中使用非常广泛的图片格式,微信、qq聊天怎么能少了它呢,尤其是那些充斥着智慧的表情包,如果没有GIF,就没有了灵魂。GIF表情给我们带来了数不清的快乐。哈哈,既然这么快乐,博主今天就自己用程序实现一下gif图片,今天的主角就是使用java实现自己的GIF动图效果

    简介

    GIF的全称是Graphics Interchange Format,可译为图形交换格式,用于以超文本标志语言(Hypertext Markup Language)方式显示索引彩色图像,在因特网和其他在线服务系统上得到广泛应用。GIF是一种公用的图像文件格式标准,版权归Compu Serve公司所有。

    GIF格式的名称是Graphics Interchange Format的缩写,是在1987年由Compu Serve公司为了填补跨平台图像格式的空白而发展起来的。GIF可以被PC和Mactiontosh等多种平台上被支持。

    GIF是一种位图。位图的大致原理是:图片由许多的像素组成,每一个像素都被指定了一种颜色,这些像素综合起来就构成了图片。GIF采用的是Lempel-Zev-Welch(LZW)压缩算法,最高支持256种颜色。由于这种特性,GIF比较适用于色彩较少的图片,比如卡通造型、公司标志等等。如果碰到需要用真彩色的场合,那么GIF的表现力就有限了。GIF通常会自带一个调色板,里面存放需要用到的各种颜色。在Web运用中,图像的文件量的大小将会明显地影响到下载的速度,因此我们可以根据GIF带调色板的特性来优化调色板,减少图像使用的颜色数(有些图像用不到的颜色可以舍去),而不影响到图片的质量。

    GIF格式和其他图像格式的最大区别在于,它完全是作为一种公用标准而设计的,由于Compu Serve网络的流行,许多平台都支持GIF格式。Compu Serve通过免费发行格式说明书推广GIF,但要求使用GIF文件格式的软件要包含其版权信息的说明。

    特点

    GIF格式的图像文件具有如下特点:

    (1)GIF格式图像文件的扩展名是“.gif”;

    (2)对于灰度图像表现最佳;

    (3)具有GIF87a和GIF89a两个版本;

    (4)采用改进的LZW压缩算法处理图像数据;

    (5)调色板数据有通用调色板和局部调色板之分,有不同的颜色取值;

    (6)不支持24bit彩色模式,最多存储256色。 [1] 

    用途

    ①GIF是压缩格式的文件,用于减少文件在网络上传递的时间;

    ②GIF的位深为1-8bit,单色透明,由一个最多256种颜色的调色板实现,图像大小最多为64K×64K像素。GIF主要是为一个数据流而设计的一种传输格式,而不是作为文件的存当格式,因此它是最复杂的一种图像文件格式;

    ③支持Bitmap、Grayscale和索引彩色模式。 [2] 

    实现原理

    官方解释:它是一个可以将多幅图像数据存于一起,并逐帧显示到屏幕上,形成简单动画的图像文件。简单讲就是将多个图片放到一起视觉上就像动画一样了。

    上面我们说到,动图是一个多幅图像数据文件,其中应至少包含两幅图片(如下视图)

    当图像越多时,动画就越细腻(文件也越大)。当每秒超过24帧,即单帧时间低于0.04秒,这些连续播放的图片就会连成视频。

    动态图的制作方法比较多,软件的话一般用PS制作较为常见和方便,后续博主有时间也学一下ps的制作方法,方式可以由静态图片制作成动态,可以ps绘制,可以用视频文件截取拼接成动图(局部动图就是这么做的,也可以用3D文件制作动画。今天我们就用程序员的方式实现GIF动图的制作效果,具体实现如下

    python实现GIF图片

    之前写过使用java实现JIF图片,现在使用python实现这个功能,我们知道python一般实现某一功能非常简单,只需很少代码,今天我门就来实现一下。

    主要利用Python的第三方库imageio

    好了废话不多说了,我们来用python实现自己的GIF动图效果吧

    imageio介绍

    imageio提供了很多方便读写图片的接口、包括读取网络图片、读取视频、生成gif图等。imageio提供许多的接口,imageio API,和示例程序

    imageio安装

    pip install imageio

    编码

    利用这个工具包,生成GIF图片就非常简单了。只需要短短几行代码,太b了

    1. import imageio
    2. def compose_gif():
    3. img_paths = ["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg"
    4. ,"img/5.jpg","img/6.jpg"]
    5. gif_images = []
    6. for path in img_paths:
    7. gif_images.append(imageio.imread(path))
    8. imageio.mimsave("test.gif",gif_images,fps=1)

    通过fps参数可以控制合成gif图片播放图片的速度和视频的播放帧率是一样的,fps参数越大播放的速率越大,fps越小播放的速度越慢.

    下面是设置的5

     

     

    读取特殊url图片

    • 读取imageio的示例图片
    1. import imageio
    2. import matplotlib.pyplot as plt
    3. def read_special_url_image():
    4. img = imageio.imread("imageio:chelsea.png")
    5. plt.imshow(img)
    6. plt.show()
    • 读取url的网络图片
    1. url = 'http://upload.wikimedia.org/wikipedia/
    2. commons/d/de/Wikipedia_Logo_1.0.png'
    3. img = imageio.imread(url)

     在这里插入图片描述

     

    再使用url读取图片的时候可能会报seek的错误,这时候可以改成下面的形式

    1. url = "https://timgsa.baidu.com/timg?image&quality=80&size=
    2. b9999_10000&sec=1545324012100&di=77a4ba3d60cdfc60
    3. d161bd6ed97c2319&imgtype=0&src=http%3A%2F%2Fwww.hxzyt
    4. j.com%2Fthemes%2Ftheme_3%2Fpc%2Fimages%2Fpython%2Fimg_01.jpg"
    5. img = imageio.imread(imageio.core.urlopen(url).read(), '.jpg')

    在这里插入图片描述

     截图和读取粘贴板的图片

    1. #截屏
    2. img = imageio.imread("")
    3. #读取粘贴板的图片
    4. img = imageio.imread("")

    读取视频 

    1. def get_video_per_frame():
    2. reader = imageio.get_reader("test.mp4")
    3. for i,im in enumerate(reader):
    4. print("Mean of frame %i is %1.1f"%(i,im.mean()))

    在使用imageio读取视频的时候可能会报上面的错误,提示需要安装ffmpeg,可以根据提示进行安装即可.除此之外,imageio还提供了许多方便的接口,有兴趣的可以去了解一下.

    ​​​​​​​

    好啦,通过上面简单的方式,我们便实现了python生成GIF图片,当然,这是站在前人的肩膀上才能有的结果。至于具体的细节,可以查看一下源码。

    参考:GIF(图片格式)_百度百科

  • 相关阅读:
    【MySQL】MySQL的增删查改(进阶)
    用代谢组学的方式,探索斑马鱼胚胎绒毛膜对微塑料和纳米塑料的屏障功能及其对胚胎发育的影响
    Kubernetes(1): kubernetes介绍
    Vue3(2):Vue3使用socket.io
    【触想智能】安卓工业平板电脑选购注意事项以及安装方式分析
    贯标还是ISO认证,哪个更重要?
    DEJA_VU3D - Cesium功能集 之 059-腾讯地图纠偏
    深挖一下 Spring Cloud Hystrix 的原理和基本用法
    消息中间件Kafuka学习——初次配置使用
    免费的运维监控系统PIGOSS BS基础版,欢迎下载使用
  • 原文地址:https://blog.csdn.net/qq_29235677/article/details/126872231