Android API v18 及更高版本中的 WEBP 编码:bitmap.compress(Bitmap.CompressFormat.WEBP, 100, outputStream) 不保存 API < 22 的 alpha 通道

Android WEBP encoding in API v18 and above: bitmap.compress(Bitmap.CompressFormat.WEBP, 100, outputStream) doesn't save the alpha channel for API < 22

该应用程序使用以下版本配置编译:

compileSdkVersion 23

buildToolsVersion“23.0.2”

minSdkVersion 18

targetSdkVersion 23

该应用有一个包含透明区域的位图。我正在使用 WEBP 格式将位图保存到文件。

位图配置为 ARGB_8888

bitmap.hasAlpha() returns true

在保存之前测试位图中的特定像素并验证某些区域是透明的。

bitmap.compress(Bitmap.CompressFormat.WEBP, 100, fileOutputStream) 

以上代码在使用 API v22、v23 进行测试时可以正常工作。透明度详细信息存储在生成的文件中。

相同的代码,当使用 API v18、v19、v21 进行测试时,不会将 alpha 通道保存到文件中。透明区域是黑色的。

所有 API 版本在解码 WEBP 文件时都能正常工作。

我打算将 libwebp 与应用程序捆绑在一起,但似乎所有文档都表明应该支持它。有人遇到过类似的问题吗?

更新:我使用 libwebp 本机库实现了编码。仍然好奇是否还有其他人遇到过同样的问题

我认为这是 Android 中的错误。文档表明从 4.2.1 开始支持 webp 的 alpha 通道,但这可能只是在 Chrome 浏览器和照片库中查看的解码。

我通过集成 libwebp 本机库并通过 JNI 调用对位图进行编码来解决问题。完美运行!