概述
最近需求要给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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复