我是靠谱客的博主 会撒娇学姐,最近开发中收集的这篇文章主要介绍android下webp的学习和使用 浓缩的精华!从零开始带你认识最新的图片格式WEBP,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  

         最近需求要给app做个漂亮、大气的引导页,找UI沟通,UI激情满满,不久就发过来了,四张图片,果然很漂亮,可一看大小,吓尿  4M多,赶快再沟通,不但要漂亮、大气,还要小,越小越好,最终经过多次沟通,发过来四张图片,总共400多K,说不能再小了,再小就影响显示效果了。

         产品过来说,app怎么这么大了,要小,越小越好,马上要地推了,越小地推越容易,成本也越低。

        没办法只有开发这边想办法了,网上搜了下,发现图片还有webp模式,谷歌推荐,国内很多app也都采用了,下载转化工具iSparta ,把四张引导图 转化后果然小多了,由原来的400多k减少到不到100K,关键是效果几乎没受到影响,至少肉眼看起来没明显失真,于是果断把大于100K的图都转化成webp显示。

       1 、首先需要把目标图片转化成webp格式的图片,使用iSparta转化,很方便快捷,转化完把原图删除,把转化后的后缀为.webp的图片拷贝到项目原图的位置

       2、加载so文件,官方提供的libwebp.jia包

             


public static Bitmap webpToBitmap(byte[] encoded) {
int[] width = new int[] { 0 };
int[] height = new int[] { 0 };
byte[] decoded = libwebp.WebPDecodeARGB(encoded, encoded.length, width,
height);
int[] pixels = new int[decoded.length / 4];
ByteBuffer.wrap(decoded).asIntBuffer().get(pixels);
return Bitmap.createBitmap(pixels, width[0], height[0],
Bitmap.Config.ARGB_8888);
}
public static byte[] streamToBytes(InputStream in) {
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
byte[] buffer = new byte[1024];
int len = -1;
try {
while ((len = in.read(buffer)) >= 0) {
out.write(buffer, 0, len);
out.flush();
}
} catch (java.io.IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return out.toByteArray();
}

3、  android4.0以上已经支持webp格式图片,即4.0以上我们可以像使用其它格式图片一样直接使用,4.0以下的需做特别处理 ,封装使用的方法:


    


public static Drawable getDrawable(int id,Context context){
return new BitmapDrawable(getBitmap(id, context));
}
public static Bitmap getBitmap(int resId ,Context context){
InputStream rawImageStream = context.getResources().openRawResource(resId);
byte[] data = com.dingji.webpdemo.WebpUtils.streamToBytes(rawImageStream);
return com.dingji.webpdemo.WebpUtils.webpToBitmap(data);
}
/**
* 赋值webp
* @param id
* @param imageview
* @param context
*/
public static void setWebPValue(int resId,ImageView iv,Context context){
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.ICE_CREAM_SANDWICH){//小于4.0
iv.setImageBitmap(getBitmap(resId, context));
}else{
iv.setImageResource(resId);
}
}
/**
* 赋值webp
* @param id
* @param view
* @param context
*/
public static void setWebPValue(int resId,View view,Context context){
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.ICE_CREAM_SANDWICH){//小于4.0
view.setBackgroundDrawable(getDrawable(resId, context));
}else{
view.setBackgroundResource(resId);
}
}

 4、项目里在需要的地方直接调用

     


ImageView iv=(ImageView) view.findViewById(R.id.guideImg);
WebpUtils.setWebPValue(R.drawable.guide_img_one, iv, context);

 使用webp的优点: 使用方便,当然最重要的是 能在不失真的情况下大幅降低图片的大小

                      缺点:  图片变小肯定是有代价的,那就是加载耗时增加,不过测试增加的时间是 几十毫秒级别的,基本在承受范围内。


下载demo:

http://download.csdn.net/detail/socketsyuhai/8870491


转化.webp图片转化工具下载:

http://download.csdn.net/detail/socketsyuhai/8870549


更详细更专业参考url:

浓缩的精华!从零开始带你认识最新的图片格式WEBP

http://www.uisdc.com/image-format-webp-introduction

最后

以上就是会撒娇学姐为你收集整理的android下webp的学习和使用 浓缩的精华!从零开始带你认识最新的图片格式WEBP的全部内容,希望文章能够帮你解决android下webp的学习和使用 浓缩的精华!从零开始带你认识最新的图片格式WEBP所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部