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;
 }

总结

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

相关文章

  • 浅谈spring中isolation和propagation的用法

    浅谈spring中isolation和propagation的用法

    这篇文章主要介绍了浅谈spring中isolation 和propagation的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 解读@Transactional失效的几种情况

    解读@Transactional失效的几种情况

    这篇文章主要介绍了@Transactional失效的几种情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Springboot集成RabbitMQ并验证五种消息模型

    Springboot集成RabbitMQ并验证五种消息模型

    RabbitMQ 提供了5种常用消息模型,本文主要介绍了Springboot集成RabbitMQ并验证五种消息模型,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Spring MVC拦截器的基本使用方法

    Spring MVC拦截器的基本使用方法

    这篇文章主要给大家介绍了关于Spring MVC拦截器的基本使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring MVC具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • SpringBoot中的自动配置原理详解

    SpringBoot中的自动配置原理详解

    这篇文章主要介绍了SpringBoot中的自动配置原理详解,springboot的自动配置类直观的表现就是通过一系列的注解,使得springboot项目在启动的时候从配置文件中加载需要自动配置的类,注入容器中,需要的朋友可以参考下
    2024-01-01
  • 在SpringBoot中使用HATEOAS的方法

    在SpringBoot中使用HATEOAS的方法

    这篇文章主要介绍了在SpringBoot中使用HATEOAS的方法,HATEOAS是实现REST规范的一种原则,通过遵循HATEOAS规范,可以解决我们实际代码实现的各种个问题,下文更多相关介绍,需要的小伙伴可以参考一下
    2022-05-05
  • springboot+vue前后端分离项目中使用jwt实现登录认证

    springboot+vue前后端分离项目中使用jwt实现登录认证

    本文介绍了如何在SpringBoot+Vue前后端分离的项目中使用JWT实现登录认证,内容包括后端的响应工具类、JWT工具类、登录用户实体类、登录接口、测试接口、过滤器、启动类以及前端的登录页面实现,感兴趣的可以了解一下
    2024-10-10
  • Springboot2以代码的方式统一配置Jackson教程

    Springboot2以代码的方式统一配置Jackson教程

    这篇文章主要介绍了Springboot2以代码的方式统一配置Jackson教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot Seata 死锁问题排查记录

    SpringBoot Seata 死锁问题排查记录

    这篇文章主要介绍了SpringBoot Seata 死锁问题排查,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12
  • java中List集合及其实现类的方法详解

    java中List集合及其实现类的方法详解

    本篇文章给大家带来的内容是关于java中List集合及其实现类的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。下面我们就来学习一下吧
    2019-06-06

最新评论