我知道这个问题已经在一些地方提到了(比如这里),但有没有一种简单的方法可以读取WebP图像,比如使用jar文件?
即使在旧设备上,也能最大限度地减少应用程序的图像大小。
是否可以像使用其他格式一样,甚至在旧的android版本(比ICS旧)上,将WebP inputStream读取到普通位图实例?
您提供的示例非常好,为了总结它,您需要遵循以下步骤:
- 在此处下载当前版本的webp库
- 在Android"jni"文件夹中创建,将libwep内容复制到其中
-
在jni/Android.mk中添加:
swig/libwebp_java_wrap.c\
至
LOCAL_SRC_FILES :=
并删除include $(BUILD_STATIC_LIBRARY)
,改为include $(BUILD_SHARED_LIBRARY)
-
转到您的项目目录并运行
/安卓ndk/ndk构建的路径
-
如果你不知道如何使用ndk,试试这里的
-
如果编译成功,您将获得libwebp.jar,并将其包含在项目构建路径中
-
在你的活动中,你首先放:
静态的{System.loadLibrary("webp");}
-
然后您可以通过InputStream(即从资产文件夹)读取.web文件:
InputStream为getAssets().open("image.web");
-
从这里下载apache库,将其包含在项目构建路径中
-
然后您可以将InputStream读取到字节数组:
byte[]encoded=IOUtils.toByteArray(is);
-
通过libwebp:解码文件
int[]width=new int[]{0};
int[]height=new int[]{0};
byte[]解码=libwebp。WebPDecodeARGB(编码,编码。长度,宽度,高度);
-
转换为位图:
int[]像素=新的int[解码长度/4];
ByteBuffer.wrap(解码).asIntBuffer().get(像素);
Bitmap bitamp=Bitmap.createBitmap(像素,宽度[0],高度[0],Bitmap.Config.ARGB_8888);
-
最后一行在此形成
-
你可以随心所欲地使用位图。
如果您的webp图像存储在assets文件夹中,则使用此代码读取并显示在imageView 中
try {
InputStream inputStream = context.getAssets().open("yourfilename.webp");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
Bitmap bmp = BitmapFactory.decodeStream(bufferedInputStream);
imageView.setImageBitmap(bmp);
} catch (IOException e) {
e.printStackTrace();
}