Java图片处理之获取gif图一帧图片的两种方法

 更新时间:2017年10月27日 11:18:17   作者:大大的微笑  
这篇文章主要给大家介绍了关于Java图片处理之获取gif图一帧图片的两种方法,分别是利用Java原生代码和使用im4java调用ImageMagick来实现,两种方法都给出来示例代码供大家参考学习,需要的朋友们下面来一起看看吧。

前言

本文主要给大家介绍了关于Java获取gif图一帧图片的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

一、Java原生代码实现gif获取一帧图片

先看测试代码:

 public static void main(String[] args) {
   /*这儿填写你存放要缩小图片的文件夹全地址*/
  String src = "c:/5.gif" ;
  /*这儿填写你转化后的图片存放的文件夹*/
  String tar = "c:/5_frame_2.jpg";
//  获取GIF图片一帧图片
  getGifOneFrame(src, tar, 2);
 }

核心代码:

FileImageInputStream in = null;
FileImageOutputStream out = null;
try {
 in = new FileImageInputStream(new File(src));
 ImageReaderSpi readerSpi = new GIFImageReaderSpi();
 GIFImageReader gifReader = (GIFImageReader) readerSpi.createReaderInstance();
 gifReader.setInput(in);
 int num = gifReader.getNumImages(true);
// 要取的帧数要小于总帧数
 if (num > frame) {
  ImageWriterSpi writerSpi = new GIFImageWriterSpi();
  GIFImageWriter writer = (GIFImageWriter) writerSpi.createWriterInstance();
  for (int i = 0; i < num; i++) {
   if (i == frame) {
    File newfile = new File(target);
    out = new FileImageOutputStream(newfile);
    writer.setOutput(out);
//    读取读取帧的图片
    writer.write(gifReader.read(i));
    return true;
   }
  }
 }

主要是创建GIFImageReader对象,然后获取要取的那一帧图片

使用im4java调用ImageMagick获取gif一帧图片

先看测试代码

public static void main(String[] args) throws Exception {

 String src = "c:/test2.gif";
 String target = "c:/test2_frame_1.jpg";

 getGifOneFrame(src, target, 1);

 System.out.println("完成");
}

主要实现:

/**
  * 获取GIF图片一帧图片 - 同步执行
  * @param src  源图片路径
  * @param target 目标图片路径
  * @param frame  获取第几帧
  * @throws Exception
  */
 public static boolean getGifOneFrame(String src, String target, int frame) throws Exception {
  if(!src.endsWith(".gif")){
   return false;
  }
  createDirectory(target);
  IMOperation op = new IMOperation();
  op.addImage(src + "["+frame+"]");
  op.addImage(target);
  ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");
  cmd.setAsyncMode(false);
  cmd.run(op);
  return true;
 }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • SpringBoot中实现文件上传、下载、删除功能的步骤

    SpringBoot中实现文件上传、下载、删除功能的步骤

    本文将详细介绍如何在 Spring Boot 中实现文件上传、下载、删除功能,采用的技术框架包括:Spring Boot 2.4.2、Spring MVC、MyBatis 3.5.6、Druid 数据源、JUnit 5 等,文中有详细的操作步骤和示例代码供大家参考,需要的朋友可以参考下
    2024-01-01
  • String StringBuilder StringBuffer区别以及源码分析

    String StringBuilder StringBuffer区别以及源码分析

    string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,同时,C++的算法库对string类也有着很好的支持,并且string类还和c语言的字符串之间有着良好的接口
    2021-06-06
  • Spring Cloud 专题之Sleuth 服务跟踪实现方法

    Spring Cloud 专题之Sleuth 服务跟踪实现方法

    这篇文章主要介绍了Spring Cloud 专题之Sleuth 服务跟踪,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • java:程序包org.springframework.boot不存在的完美解决方法

    java:程序包org.springframework.boot不存在的完美解决方法

    最近项目中运行的时候提示了"java: 程序包org.springframework.boot不存在",下面这篇文章主要给大家介绍了关于java:程序包org.springframework.boot不存在的完美解决方法,需要的朋友可以参考下
    2023-05-05
  • 流式图表拒绝增删改查之kafka核心消费逻辑上篇

    流式图表拒绝增删改查之kafka核心消费逻辑上篇

    这篇文章主要为大家介绍了流式图表拒绝增删改查之kafka核心消费逻辑详解的上篇,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Java生成二维码的实例代码

    Java生成二维码的实例代码

    这篇文章主要介绍了Java生成二维码的实例代码,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-09-09
  • java中Swing五种常见的布局方式

    java中Swing五种常见的布局方式

    本文通过代码示例给大家详细讲解了java中Swing五种常见的布局方式,以及相关注意知识点,有兴趣的朋友参考学习下。
    2018-03-03
  • mybatis 查询返回Map<String,Object>类型

    mybatis 查询返回Map<String,Object>类型

    本文主要介绍了mybatis 查询返回Map<String,Object>类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 浅谈升级Spring Cloud到Finchley后的一点坑

    浅谈升级Spring Cloud到Finchley后的一点坑

    这篇文章主要介绍了浅谈升级Spring Cloud到Finchley后的一点坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • java中httpclient封装post请求和get的请求实例

    java中httpclient封装post请求和get的请求实例

    这篇文章主要介绍了java中httpclient封装post请求和get的请求实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论