我想将动画 webp 转换为 gif,我有 gif 编码器+解码器和 webp ecnoder,它仅适用于 gif。我也想处理动画 webp,所以我需要首先解码动画 webp 并获取每个帧的位图。我无法获得任何动画 webp 解码器,后来发现 android.graphic 有支持动画 webp 图像的图像解码器,但它显示了可绘制的示例,并且它具有动画 webp 的 start() 方法。
如何迭代每个帧以将它们转换为位图或某些数据类型(如 byte[]、base64、流等),以便我可以将其转换为位图。
File file = new File(...);
ImageDecoder.Source source = ImageDecoder.createSource(file);
Drawable drawable = ImageDecoder.decodeDrawable(source);
以下是我们如何在不使用任何第三方库的情况下从动画 webp 文件中提取帧。 根据 Google 的 WebP 图像格式容器规范, 我们需要以特定的方式阅读图像,您几乎可以使用任何您喜欢的语言来做到这一点。 在Java中,您可以创建动画webp文件的InputStream并按顺序读取4个字节的数据。 有一个库 android-webp-encoder 用于编码 webp 图像并用纯 java 编写。 尽管您也可以使用它来解码图像。需要修改库。我已修改但尚未发布。很快我会在修复 bug 的同时将其上传到 github 上。
但是我可以解释如何修改该库来解码帧或编写自己的代码来解码。
PS:我将用更详细的步骤和代码片段更新答案。目前我正在尝试优化解码器
作为实现相同目标的替代方案,我通过使用 Glide 和 APNG4 库以及 git 上提供的一些编码器解码器解决了这个问题。
您可以使用 APNG4 单独进行编码解码和其他操作。