我写了一个从网上检索图像的服务(JPEG,PNG,...),然后以webp格式保存到磁盘。
我使用以下代码保存图像:
try (FileOutputStream fos = new FileOutputStream(imgFile)) {
bitmap.compress(Bitmap.CompressFormat.WEBP, 100, fos);
} catch (IOException e) {
Log.e(TAG, "IOException writing file");
} catch (SecurityException e) {
Log.e(TAG, "SecurityException writing file");
}
我没有收到任何警告。
如果应用程序在具有API 22或23的设备中运行,则解码的图像文件在出现时会显示alpha通道。
如果我在API19仿真器中运行应用程序,则解码后的图像不会显示为alpha通道(显示为黑色)。
我更喜欢WEBP,因为它比PNG轻,它应该有alpha通道。
PS:我也尝试过80和100的质量
评论1
检索到的图像是带有Alpha通道的PNG。
使用API>的其他设备(以及模拟器)中的相同图像22在WEBP中转换时显示透明度。
我也和其他PNG一起尝试过。如果我使用检索到的位图并将其保存在所有设备的PNG中,它在API 19中也能正确显示透明度。
只有在我以webp格式保存时才会验证此问题。我试图从模拟器API 19中提取webp编码文件,它不再具有alpha通道。
我以这种方式检索位图:
try (InputStream is = new URL(mImageUrl).openStream()) {
bitmap = BitmapFactory.decodeStream(is);
} catch (MalformedURLException e) {
Log.e(TAG, "MalformedURLException " + e.getMessage());
} catch (IOException e) {
Log.e(TAG, "IOException decoding url " + e.getMessage());
}
评论2
如果我尝试将模拟器中的WEBP文件替换为具有透明度的WEBP文件,那么......应用程序将以透明的方式显示图像。
所以,这是文件保存方式的问题!