本文概括

前端访问后端接口上传webp格式文件,后端将webp文件转换成png格式

项目maven依赖

        <!-- https://mvnrepository.com/artifact/org.sejda.imageio/webp-imageio --><dependency><groupId>org.sejda.imageio</groupId><artifactId>webp-imageio</artifactId><version>0.1.6</version></dependency>

后端代码如下

package com.geer2.just.photo.system.controller;
import com.luciad.imageio.webp.WebPReadParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.FileImageInputStream;
import java.awt.image.BufferedImage;
import java.io.*;@RestController
@RequestMapping("/file22")public class Test {/*** 上传webp文件转成png格式* @param mulFile* @throws Exception*/@PostMapping("/upload")public void photoList(@RequestParam("file") MultipartFile mulFile) throws Exception {File file = multipartFileToFile2(mulFile);}/*** 将MultipartFile转为File* @param mulFile* @return*/public static File multipartFileToFile2(MultipartFile mulFile) throws IOException {InputStream ins = mulFile.getInputStream();String fileName = mulFile.getOriginalFilename();String prefix = getFileNameNoEx(fileName);String suffix = "."+getExtensionName(fileName);File toFile = File.createTempFile(prefix,suffix);OutputStream os = new FileOutputStream(toFile);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.close();ins.close();//webp文件转png后文件地址包含文件名字String news = toFile.getParent()+"/"+ toFile.getName().substring(0,toFile.getName().indexOf(".webp"))+".png";return webpToPng(toFile,new File(news));}/*** 获取文件扩展名**/public static String getExtensionName(String filename) {if ((filename != null) && (filename.length() > 0)) {int dot = filename.lastIndexOf('.');if ((dot >-1) && (dot < (filename.length() - 1))) {return filename.substring(dot + 1);}}return filename;}/*** 获取不带扩展名的文件名**/public static String getFileNameNoEx(String filename) {if ((filename != null) && (filename.length() > 0)) {int dot = filename.lastIndexOf('.');if ((dot >-1) && (dot < (filename.length()))) {return filename.substring(0, dot);}}return filename;}/*** 图片webp文件转png文件* @param webpFile 源webp文件* @param pngFile 转换后png文件* @return* @throws IOException*/public static File webpToPng(File webpFile, File pngFile) throws IOException {// Obtain a WebP ImageReader instanceImageReader reader = ImageIO.getImageReadersByMIMEType("image/webp").next();// Configure decoding parametersWebPReadParam readParam = new WebPReadParam();readParam.setBypassFiltering(true);// Configure the input on the ImageReaderreader.setInput(new FileImageInputStream(webpFile));// Decode the imageBufferedImage image = reader.read(0, readParam);//the `png` can use `jpg`ImageIO.write(image, "png", pngFile);return pngFile;}
}

java webp文件转png,jpg相关推荐

  1. Java CSV文件读取、写入及追加

    Java CSV文件读取.写入及追加 https://blog.csdn.net/liq816/article/details/81286472 追加: FileOutputStream out = ...

  2. 一个java删除文件夹的小方法

    java删除文件夹都是从里向外删除,使用递归的方法. public class IO_FILEdemo09 {public static void main(String[] args) {// TO ...

  3. java大文件读写操作

    转载自:http://blog.csdn.net/akon_vm/article/details/7429245 RandomAccessFile RandomAccessFile是用来访问那些保存数 ...

  4. Java 查看文件绝对路径,JAVA获取文件绝对路径的方法

    本文实例讲述了JAVA获取文件绝对路径的方法.分享给大家供大家参考.具体实现方法如下: /** * 获取一个类的class文件所在的绝对路径. 这个类可以是JDK自身的类,也可以是用户自定义的类,或者 ...

  5. java编译会产生多少个类文件,编译一个定义了三个类和四个方法的Java源程序文件,总共会产生多少个字节码文件 ? ( )...

    编译一个定义了三个类和四个方法的Java源程序文件,总共会产生多少个字节码文件 ? ( ) 更多相关问题 论述风化作用基本概念及其主要类型. 什么是药用植物 学?其 研究任务是什么 ? 庐山瀑布很有名 ...

  6. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  7. 创建和应用Java包文件的两种方式

    <Java编程艺术>章节选登.作者:高永强 清华大学出版社 (即将出版) 12.1  包--package       包是Java提供的文件管理机制.包把功能相似的类,按照Java的名字 ...

  8. JAVA大文件上传断点续传解决方案

    JAVA大文件上传断点续传解决方案 参考文章: (1)JAVA大文件上传断点续传解决方案 (2)https://www.cnblogs.com/songsu/p/11834425.html (3)ht ...

  9. 用Java获取文件的MD5校验和

    我正在寻找使用Java获取文件的MD5校验和. 我真的很惊讶,但是我找不到任何能显示如何获取文件的MD5校验和的东西. 怎么做? #1楼 Guava现在提供了一个新的,一致的哈希API,它比JDK中提 ...

最新文章

  1. NLP(3)| seq to seq 模型
  2. 在ubuntu上使用gdb-multiarch 跨平台调试
  3. Bitmap too larget to be uploaded into a texture的解决方法
  4. web-5. 超链接的使用
  5. windows环境下安装scrapy框架报错问题--最快捷有效的解决方案
  6. 1986年讲MDCT的基础性论文
  7. vue data变量之间相互赋值或进行数据联动
  8. JavaScript 常用方法封装使用
  9. npm上传自定义vue组件入门
  10. SAP License:物料编码原则<外部分配还是内部分配>之三
  11. 推荐 :深度学习初学者不可不知的25个术语和概念(上)
  12. mybatis自定义插件
  13. 文库网站开发,文库网站定制,仿百度在线文档网站建设
  14. 笔记本摄像头计算机,如何解决笔记本电脑摄像头异常问题
  15. 服务器运行cad慢,CAD绘图唯快不破(CAD运行用加速技巧)
  16. Flutter 闪屏页实现
  17. elasticsearch查看版本号
  18. 泊松过程2 | 泊松过程扩展
  19. 行内和块级元素区别?如何让行内元素设置宽高?
  20. java 判断list是否越界_关于ArrayList的越界问题?

热门文章

  1. jQuery - 实例- 小小动画导航栏
  2. ssm基于微信小程序的游泳馆管理系统+uinapp+java+计算机毕业设计
  3. 如何对CAD绘图区域进行设置?
  4. convs在MATLAB中,matlab2_MATELAB课程设计_ppt_大学课件预览_高等教育资讯网
  5. excel打印预览在哪里_易打标条码标签设计打印软件下载_易打标条码标签设计打印软件绿色版下载...
  6. 集线器、中继器、网桥、交换机、网关、路由器——今天必把你们区分开
  7. basic计算机编程基础,QBASIC编程语言基础
  8. 量化策略:如何利用自回归模型构建日内高频策略
  9. 每天一个CSS小特效,文字闪烁——【钢铁侠:爱你三千遍】
  10. 怎样去除图片水印?教你一个一键去除水印的方法