我编写了一个从 Web 检索图像(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 文件替换为计算机中的透明文件,那么...应用程序将显示透明图像。
所以,这是文件如何保存的问题!