百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

ubuntu移植libwebp到Android平台

liuian 2024-12-09 15:20 55 浏览

1.简介

Webp图片格式是google官方推出的一种图片格式,相比传统的jpeg格式,可以节约1/3的流量,因此在做大量使用图片的App时,益处多多。

由于4.0以下Android对Webp的支持并不好,因此需要我们手动支持。

2.源码配置

libwebp的最新源码,可以去google官网下载,头条不方便给外链。

建议开个代理

将源码文件夹改名为jni

编辑Android.mk文件,开头加上

#开启webp 共享库编译

ENABLE_SHARED := 1

如图

添加swig/libwebp_java_wrap.c文件到Android.mk中

添加Application.mk文件

APP_ABI := armeabi armeabi-v7a

APP_PLATFORM := android-8

3.编译生成

此时可以使用ndk-build命令编译

项目中使用

建立Sample工程

将swig目录下的libwebp.jar文件和编译生成的库文件添加到项目中去

整理的对应的工具类

package com.webp.lib;

import android.graphics.Bitmap;

import com.google.webp.libwebp;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.nio.ByteBuffer;

/**

* 作者: andy

* 时间: 16-4-8

* 描述:

* 取自互联网

* 修订: 暂无

*/

public class WebpUtils {

static {

System.loadLibrary("webp");

}

/**

* 字节数组转换为bitmap对象

*

* @param encoded

* @return

*/

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);

}

/**

* 流转换为字节数组

* @param in

* @return

*/

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();

}

public static boolean isWebp(byte[] data) {

return data != null && data.length > 12 && data[0] == 'R'

&& data[1] == 'I' && data[2] == 'F' && data[3] == 'F'

&& data[8] == 'W' && data[9] == 'E' && data[10] == 'B'

&& data[11] == 'P';

}

/**

* 获取webp版本

* 用来测试JNI的调用

* @return

*/

public static int getWebpVersion() {

return libwebp.WebPGetDecoderVersion();

}

}

效果如图所示

使用Geeymotion的模拟器2.3.7成功加载webp图片

相关推荐

新冠疫苗接种查询(新冠疫苗接种查询不到了)

银川市疫苗接种信息在“我的宁夏”app里查询。打开“我的宁夏”app,打开“健康码”选项,然后打开“疫苗接种查询”,就可以查询到你的疫苗接种信息了。如果你接种了吗两次疫苗,你的健康码就会镶嵌了金边,只...

cdr格式文件怎么打开(cdr格式用什么可以打开)

cdr是什么文件?cdr文件用什么打开?cdr文件是CorelDraw图像制作软件标准的输出格式,与photoshop(PS)图片设计软件类似都属于图片设计软件,需要打开cdr文件我们就需要先了解C...

微软win7系统下载(微软官网window7下载)

因为你是按照名称排列的,试着修改一下排序方式,方法是:在桌面空白处右键,排序方式,修改日期这是因为大部分电脑用的都是GHOST系统,该系统在安装后都会向注册表写入自己的“私人信息”,如:风林火山GH...

xp10下载(Xp10下载破解版)

下载win10系统所需要的时间取决于很多因素。首先就是系统本身的大小,一般情况下,纯净版的系统在2.3个g左右,而有一些定制版的系统大小就不好说了,但是删减版的系统可以做到1.7个g左右,系统本身文件...

最强神级选择系统(无敌之最强神级选择系统)

8.自由高达《机动战士高达SEED》  7.V高达《机动战士高达V》  6.00高达《机动战士高达00》  5.独角兽高达《机动战士高达UC》  4.倒A高达《倒A高达》  3.V2高达《机动战士高...

惠普服务器售后电话客服热线

售后官网:https://support.hp.com/cn-zh/check-warranty该网站为惠普全新一站式服务支持平台,小惠将为您提供专业的技术解答和产品导购。同时提供全面的自助解决方案...

win10改成win7界面(win10改为win7界面)

1、首先我们打开你的电脑,选择打开左下角的开始菜单。2、打开后就选择设置按钮。3、打开之后就是这个页面往下拉,你就会看见更新,就是红圈圈里面,打开它。4、打开之后就是这个页面。5、然后我们在左侧选择恢...

win10系统怎么恢复系统还原(win10系统恢复怎么操作)

1、开机不断点击F8键,进入系统操作选单,选“最后一次正确配置”,重启电脑,看能否解决。2、开机不断点击F8键,进入系统操作选单,选“安全模式”,如能成功进入,依次单击“开始”→“所有程序”→“附件”...

怎么把电脑c盘格式化(怎么把c盘格式化吗)

1.在进行c盘格式化之前,必须备份重要的数据,以免数据丢失。2.在格式化c盘之前,确保所有的应用程序和系统文件都已经备份。否则,在进行格式化之后,将需要重新安装操作系统和所有的应用程序。3.如果...

中国移动赠送的wifi6路由器(192.168.10.1中国移动路由器)

移动tclwifi6路由器很好的。WiFi6路由器远强于WiFi5路由器,值得购买性价比不错。家庭生活中网速慢最主要的原因并非速率,而是穿墙效果。坐在离路由器很近的地方,手机网速一般不会有问题。...

office2010如何激活免费使用
  • office2010如何激活免费使用
  • office2010如何激活免费使用
  • office2010如何激活免费使用
  • office2010如何激活免费使用
win官网网址(win官方网站)

具体方法如下:打开电脑,在浏览器地址栏输入window,就会进入win中文官网,然后再寻找自己需要的软件,升级包等就可以了。下面是windows官网网址:1http://www.microsoft.c...

电脑的任务栏不见了怎么恢复
  • 电脑的任务栏不见了怎么恢复
  • 电脑的任务栏不见了怎么恢复
  • 电脑的任务栏不见了怎么恢复
  • 电脑的任务栏不见了怎么恢复
wifi网址登录入口(wifi网址登录入口有哪些)

wifi网页登录入口是网关地址192.168.1.1.1.首先检查路由器线路连接(参考前面手机设置路由器部分)2.将电脑Tnternet协议(TCP/IP)属性设置为“自动获取IP地址”和“自...

没有驱动程序怎么安装打印机

(1)启动电脑进入Windows操作系统,在桌面上单击开始-设置-打印机。(2)用鼠标右单击安装好的打印机图标,在弹出的右键菜单中选择属性,然后单击打印测试页按钮。(3)此时打印机会打出一页信息,从这...