致敬GIF之父,使用Java生成GIF图片

简介: GIF图片是我们日常生活中使用非常广泛的图片格式,尤其是那些充斥着智慧的表情包,如果没有GIF,就没有了灵魂。

哈喽,大家好,我是强哥。

据美国媒体报道,美国计算机科学家、GIF图像格式发明人斯蒂芬•威尔海特(Stephen Wilhite)于当地时间3月14日因新冠肺炎去世,享年74岁。1987年,他创建了图形交换格式(GIF)来压缩图像;2012年,GIF被牛津美国词典评为年度词语;2013年,斯蒂芬凭借发明GIF获得韦比终身成就奖。

首先,为GIF之父的离世表示惋惜。

GIF图片是我们日常生活中使用非常广泛的图片格式,尤其是那些充斥着智慧的表情包,如果没有GIF,就没有了灵魂。

今天强哥在这里,就来教大家使用Java生成GIF格式的图片。


动手


这里,我们不对GIF的原来做过多的解释,直接实操。


导包


我们可以使用一个开源GIF生成工具包来实现。这里用的是animated-gif-lib,具体项目地址如下:


https://github.com/rtyley/animated-gif-lib-for-java


10.png


项目中导入Maven包:


<dependency>
  <groupId>com.madgag</groupId>
  <artifactId>animated-gif-lib</artifactId>
  <version>1.4</version>
</dependency>


代码开发


有了工具包,生成GIF图片就非常简单了。只需要用到AnimatedGifEncoder配置一些图片的播放间隔、重复次数、图片生成路径等内容就可以生成想要的GIF图片啦~

具体代码如下:


import com.madgag.gif.fmsware.AnimatedGifEncoder;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
public class GifDemo {
  public static void main(String[] args) throws Exception {
    BufferedImage image1 = ImageIO.read(new File(GifDemo.class.getResource("/static/1.jpeg").getFile()));
    BufferedImage image2 = ImageIO.read(new File(GifDemo.class.getResource("/static/2.jpeg").getFile()));
    BufferedImage image3 = ImageIO.read(new File(GifDemo.class.getResource("/static/3.jpeg").getFile()));
    AnimatedGifEncoder e = new AnimatedGifEncoder();
    // 设置生成图片大小
    e.setSize(900, 1000);
    //生成的图片路径
    e.start(new FileOutputStream("./testgif.gif"));
    //图片之间间隔时间
    e.setDelay(500); 
    //重复次数 0表示无限重复 默认不重复
    e.setRepeat(0);
    //添加图片
    e.addFrame(image1);
    e.addFrame(image2);
    e.addFrame(image3);
    e.finish();
  }
}


上面的代码很简单,AnimatedGifEncoder类中提供了很多简单的方法:


  • setSize设置生成图片大小
  • start设置生成的图片路径,打开输出流
  • setDelay图片之间间隔时间
  • setRepeat重复次数 0表示无限重复 默认不重复


跑起来看看


首先我们在classpath下准备三张图。


然后运行上面的代码,将图片生成在当前目录下,用浏览器打开生成图片。这样就轻轻松松就用Java生成了GIF图片。


这样的话,嘿嘿,以后如果有好看的图片,如果嫌弃图片张数太多不好整理,直接用代码将他们搞到一张GIF里是不是就可以了。我真是精打细算的小九九啊。


强哥有话说


好啦,通过上面简单的方式,我们便实现了Java生成GIF图片,当然,这是站在前人的肩膀上才能有的结果。至于具体的细节,比较懒又直接要代码的小伙伴,可以关注公众号「强哥叨逼叨」后台回复「GIF」获取项目具体代码哦。

相关文章
|
1月前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
64 4
|
1月前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
56 2
|
1月前
|
算法 Java Linux
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
这篇文章介绍了如何使用Java的Graphics2D类在图片上合成另一个照片,并将照片切割成圆形头像的方法。
49 1
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
|
5月前
|
数据可视化 Java
Java语言使用DL4J实现图片分类
【6月更文挑战第14天】Java语言使用DL4J实现图片分类
107 3
|
1月前
|
Java 数据安全/隐私保护
Java ffmpeg 实现视频加文字/图片水印功能
【10月更文挑战第22天】在 Java 中使用 FFmpeg 实现视频加文字或图片水印功能,需先安装 FFmpeg 并添加依赖(如 JavaCV)。通过构建 FFmpeg 命令行参数,使用 `drawtext` 滤镜添加文字水印,或使用 `overlay` 滤镜添加图片水印。示例代码展示了如何使用 JavaCV 实现文字水印。
|
1月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
19 1
|
1月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
60 1
|
1月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
105 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
2月前
|
Java
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
这篇文章介绍了Java中FileInputStream和FileOutputStream的使用,包括如何读取和写入txt文件以及如何拷贝图片文件。
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
|
2月前
|
存储 缓存 监控
Java——图片文件位于 bin 目录下,下载新图片会导致应用程序重启
【9月更文挑战第22天】在Java应用中,若图片位于bin目录下且下载新图片导致应用重启,可能是因为部署方式不当或资源监控机制过于敏感。解决方法包括:更改图片存储位置至独立目录;配置应用服务器减少资源监控敏感度;使用独立资源服务器托管静态资源;优化代码减少资源重复加载。具体方案需根据应用实际情况和技术栈调整。