网站首页 > 精选教程 正文
哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步
一位上进心十足的【Java ToB端大厂领域博主】!
喜欢java和python,平时比较懒,能用程序解决的坚决不手动解决? 如果有对【java】感兴趣的【小可爱】,欢迎关注我
??????感谢各位大可爱小可爱!??????
————————————————如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。
目录
简介
特点
用途
实现原理
java实现GIF图片
maven依赖
编码
?
编辑
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动图的制作效果,具体实现如下
java实现GIF图片
maven依赖
好了废话不多说了,我们来用java实现自己的GIF动图效果吧
我们可以使用一个开源GIF生成工具包来实现。这里用的是animated-gif-lib,具体项目地址如下
https://github.com/rtyley/animated-gif-lib-for-javahttps://github.com/rtyley/animated-gif-lib-for-java
?编辑
maven依赖
<dependency>
<groupId>com.madgag</groupId>
<artifactId>animated-gif-lib</artifactId>
<version>1.4</version>
</dependency>
编码
利用这个工具包,生成GIF图片就非常简单了。只需要用到AnimatedGifEncoder配置一些图片的播放间隔、重复次数、图片生成路径等内容就可以生成想要的GIF图片啦~
项目的结构如下
?编辑
package cn.mystylefree.gifdemo;
import com.madgag.gif.fmsware.AnimatedGifEncoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @program my-project-model
* @description:
* @author: lee
* @create: 2022/09/15 15:52
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedImage image1 = ImageIO.read(new File(Main.class.getResource("/static/snow1.png").getFile()));
BufferedImage image2 = ImageIO.read(new File(Main.class.getResource("/static/snow2.png").getFile()));
BufferedImage image3 = ImageIO.read(new File(Main.class.getResource("/static/snow3.png").getFile()));
BufferedImage image4 = ImageIO.read(new File(Main.class.getResource("/static/snow4.png").getFile()));
BufferedImage image5 = ImageIO.read(new File(Main.class.getResource("/static/snow5.png").getFile()));
AnimatedGifEncoder e = new AnimatedGifEncoder();
e.setSize(900, 1000);
//生成的图片路径
e.start(new FileOutputStream("./test_gif.gif"));
//图片之间间隔时间
e.setDelay(500);
//重复次数 0表示无限重复 默认不重复
e.setRepeat(0);
//添加图片
e.addFrame(image1);
e.addFrame(image2);
e.addFrame(image3);
e.addFrame(image4);
e.addFrame(image5);
e.finish();
}
}
上面的代码很简单,AnimatedGifEncoder类中提供了很多简单的方法:
- setSize设置生成图片大小
- start设置生成的图片路径,打开输出流
- setDelay图片之间间隔时间
- setRepeat重复次数 0表示无限重复 默认不重复
运行上面的代码,将图片生成在当前目录下,用浏览器打开生成图片效果如下(这里由于平台限制,所以我设置了图片大小):
?
编辑
上面的图片如下
?编辑
snow1
?编辑
snow2
?编辑
snow3
?编辑
snow4
?编辑
snow5
好啦,通过上面简单的方式,我们便实现了Java生成GIF图片,当然,这是站在前人的肩膀上才能有的结果。至于具体的细节,可以查看一下源码。
创作不易请小伙伴给博主点一个赞吧
?
编辑
参考:GIF(图片格式)_百度百科
?
猜你喜欢
- 2024-11-25 干货|一文搞定 uiautomator2 自动化测试工具使用
- 2024-11-25 Java去除PDF文件中的图片
- 2024-11-25 2021 年 Node.js 开发人员学习路线图
- 2024-11-25 Java之base64转化成图片文件
- 2024-11-25 wangEditor 实现ctrl+v粘贴图片并上传、word粘贴带图片
- 2024-11-25 姐姐带我玩转java设计模式(内附照片)- 代理模式
- 2024-11-25 base64转化为图片
- 2024-11-25 Java 给Excel图表设置背景颜色和背景图片
- 2024-11-25 一个支持将html转为PDF、图片,且支持PDF加水印的项目
- 2024-11-25 使用SpringBoot Schedule实现定时任务动态添加、修改、删除等操作
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)