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; }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
相关文章
String StringBuilder StringBuffer区别以及源码分析
string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,同时,C++的算法库对string类也有着很好的支持,并且string类还和c语言的字符串之间有着良好的接口2021-06-06Spring Cloud 专题之Sleuth 服务跟踪实现方法
这篇文章主要介绍了Spring Cloud 专题之Sleuth 服务跟踪,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-08-08java:程序包org.springframework.boot不存在的完美解决方法
最近项目中运行的时候提示了"java: 程序包org.springframework.boot不存在",下面这篇文章主要给大家介绍了关于java:程序包org.springframework.boot不存在的完美解决方法,需要的朋友可以参考下2023-05-05mybatis 查询返回Map<String,Object>类型
本文主要介绍了mybatis 查询返回Map<String,Object>类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-03-03浅谈升级Spring Cloud到Finchley后的一点坑
这篇文章主要介绍了浅谈升级Spring Cloud到Finchley后的一点坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-10-10java中httpclient封装post请求和get的请求实例
这篇文章主要介绍了java中httpclient封装post请求和get的请求实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10
最新评论