欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-04-02 10:04:04
前言 本文主要给大家介绍了关于java获取gif图一帧图片的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 一、java原生代码实现gif获...

前言

本文主要给大家介绍了关于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;
 }

总结

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