ubuntu移植libwebp到Android平台
来源:互联网 发布:手机淘宝代付在哪里 编辑:程序博客网 时间:2024/05/19 13:18
简书排版
http://www.jianshu.com/p/413f95fc86a7
目录
- 1.简介
- 2.源码配置
- 3.编译生成
- 4.示例源码地址
- 5.参考
1.简介
Webp图片格式是google官方推出的一种图片格式,相比传统的jpeg格式,可以节约1/3的流量,因此在做大量使用图片的App时,益处多多。
而此前项目来来回回换了几个图片框架,都不太理想
最后决定选用Glide+libwebp的模式
由于4.0以下Android对Webp的支持并不好,因此需要我们手动支持。
2.源码配置
libwebp的最新源码
建议开个代理
将源码文件夹改名为jni
编辑Android.mk文件,开头加上
#开启webp 共享库编译ENABLE_SHARED := 1
如图
添加swig/libwebp_java_wrap.c文件到Android.mk中
添加Application.mk文件
APP_ABI := armeabi armeabi-v7aAPP_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图片
4.示例源码地址
https://github.com/byhook/WebpSample
5.参考
官方使用FAQ
0 0
- ubuntu移植libwebp到Android平台
- Ubuntu下移植Tcpdump到Android平台
- ubuntu移植jsoncpp到Android平台
- ubuntu移植crypto++到Android平台
- ubuntu移植libcurl到Android平台
- 在ubuntu系统下cocos2dx移植到android平台
- 在ubuntu系统下cocos2dx移植到android平台
- Ubuntu 14.04.2 移植FFmpeg 2.8.3 到Android平台
- Ubuntu 14.04.2 移植FFmpeg 2.8.3 到Android平台
- 移植Busybox到Android平台
- ffmpeg移植到android平台
- FFmpeg 移植到 Android 平台
- srtp移植到android平台
- gloox移植到android平台
- FFmpeg 移植到 Android 平台
- 移植DynamixelSDK到Android平台
- tensorflow 移植到android平台
- 正式移植到Ubuntu平台开发
- putty远程登录LINUX SSH主机
- 高级选项更改MathType数学公式样式
- Eclipse中变量名相同变色和高亮设置
- 数据结构与算法-内行看门道
- 数据结构复习
- ubuntu移植libwebp到Android平台
- vim命令
- 日期格式化 yyyy-MM-dd HH:mm:ss.fff
- C# litJson 使用方法
- vim编译器之神的基本命令
- 『Python』序列学习总结之六——如何命名规范的变量名
- 【HUSTOJ】1011: 行李托运
- 符号位为1的二进制转十进制负数
- D:\miles28370\miles28370\application\core\build.xml:18: Compile failed; see the compiler error outpu