网上找了很多 没有具体的实现方法中 自己摸摸索索 找了下 做个总结吧 原理就是获取webp图片的每一帧,(也可对这每一帧优化 美化)将每一帧写入一个gif文件中,使用的是twelvemonkeys
首先在maven中导入twelvemonkeys
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-webp</artifactId>
<version>3.8.1</version>
</dependency>
<!--
Optional dependency. Needed only if you deploy ImageIO plugins as part of a web app.
Make sure you add the IIOProviderContextListener to your web.xml, see above.
-->
<dependency>
<groupId>com.twelvemonkeys.servlet</groupId>
<artifactId>servlet</artifactId>
<version>3.8.1</version>
</dependency>
<!--
Or Jakarta version, for Servlet API 5.0
-->
<dependency>
<groupId>com.twelvemonkeys.servlet</groupId>
<artifactId>servlet</artifactId>
<version>3.8.1</version>
<classifier>jakarta</classifier>
</dependency>
在拿到每一帧后 还可以再去操作美化它 添加锐化滤镜效果 --> 调整曲线 --> USM锐化 --> 扩散各向异性 --> 滤镜减少杂色 添加锐化滤镜效果 --> 调整曲线 --> USM锐化 --> 扩散各向异性 --> 滤镜减少杂色 等等
try {
ImageReader reader = ImageIO.getImageReadersByFormatName("WEBP").next();
reader.setInput(ImageIO.createImageInputStream(new File(inputPath)));
int numImages = reader.getNumImages(true);
AnimatedGifEncoder e = new AnimatedGifEncoder();
// //生成的图片路径
e.start(new FileOutputStream(newPath));
// //图片之间间隔时间
e.setDelay(50);
//重复次数 0表示无限重复 默认不重复
e.setRepeat(0);
for (int i = 0; i < numImages; i++) {
BufferedImage image = reader.read(i);
// 处理每一帧的image
e.setSize(image .getWidth(), image .getHeight());
e.addFrame(image);
}
//添加图片
// createGIF(imageList,new File(newPath),50);
System.out.println("over");
} catch (IOException e) {
e.printStackTrace();
}