ubuntu移植libwebp到Android平台

libwebp库,可用于webp的移植 libwebp库,从官网下载下来的,大家也可以去官网上下载 立即下载

简书排版
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-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图片

4.示例源码地址

https://github.com/byhook/WebpSample

5.参考

官方使用FAQ

安卓webp解码库libwebp.jar libwebp.so android将webp格式图片解码转换为bitmap格式库文件 立即下载

相关推荐

libwebp源码及编译.zip

【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 ) https://hanshuliang.blog.youkuaiyun.com/article/details/116104445 博客资源

【Android 安装包优化】WebP 应用 ( Android 中使用 libwebp.so 库解码 WebP 图片 )

一、Android 中使用 libwebp.so 库解码 WebP 图片、 二、完整代码示例、 三、参考资料、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1749

Android 配置 libwebp.so 项目源码 ( 兼容 4.0 以下版本 )

Android 配置 libwebp.so 项目源码 ( 兼容 4.0 以下版本 )

【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )

一、 libwebp 源码下载、 二、 libwebp 源码编译脚本修改、 三、 libwebp 函数库编译、 四、参考资料

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2072

逆向实战:TikTok X-Gorgon算法解析与Unidg补环境技巧

本文详细解析了TikTok X-Gorgon算法的逆向工程全流程,包括参数定位、变种RC4算法还原及Unidbg补环境技巧。通过动态调试与静态分析相结合,揭示了X-Gorgon的生成逻辑和加密细节,为移动安全研究提供了实用指南。

weixin_28568819的博客 694

数字后端DRC Violation定位与自动化修复:Innovus与Calibre协同实战

设计规则检查(DRC)是芯片tapeout前确保版图可制造性的关键验证环节。在数字后端流程中,Calibre作为signoff级物理验证工具,会依据代工厂SVRF规则文件对GDS进行严格几何检查;而Innovus则提供快速迭代的in-design DRC反馈。两者协同成为工程师定位violation、保障流片成功的主流工作流。面对成千上万条DRC violation,高效的定位与分类思路、跨工具映射技巧,以及基于Tcl脚本的自动化修复方法,能大幅缩短物理验证周期。本文从DRC的分层定位出发,结合Innovu

weixin_29185167的博客 336

编译libwebp源代码

【代码】编译libwebp源代码。

u011135963的博客 491

Halcon学习之一维测量(3)

带定位器的测量。首先看一下“定位”是什么意思?回答:比如我们测量一个芯片,这时候我们设置一个测量矩形,来沿着测量目标进行测量。但是下一张当芯片的位置发生变化时,测量矩形的位置就不对了,就不是沿着测量目标了。这样就不对了!芯片在转,测量矩形也要跟着一起转才行。这个时候就需要“定位”来起作用了!定位之后得到这个芯片的旋转角度之后,测量矩形可以跟着这个角度转。这就是“定位”+“测量”,这是我们工业视觉常用的一个手法,在Halcon里面也是有例子展现的。

deep_love1314的博客 788

编译libwepb

1. 下载源码: https://github.com/webmproject/libwebp/ 2. 编译: ./autogen.sh ./configure --prefix=/home/charles/install --enable-libwebpmux --enable-libwebpdemux --enable-libwebpdecoder --enable-libwebpext...

小猪爱拱地 1018

Win11此电脑怎么放在桌面上?Win11此电脑如何显示在电脑桌面上?

相信用习惯Win10的用户都喜欢电脑电脑桌面上的此电脑,但是很多用户更新完Win11正式版以后,发现桌面只有回收站和Microsoft Edge图标,没有此电脑。那么,Win11此电脑要如何显示呢?下面小编为大家简单介绍一下操作方法!5、桌面图标设置窗口,点击勾选计算机,然后点击确定,桌面就可以显示此电脑图标了。1、桌面空白处,点击右键,在打开的菜单项中,选择显示设置;4、个性化 - 主题,相关设置下,点击桌面图标设置;3、右侧点击主题(安装、创建、管理);2、设置窗口,左侧点击个性化;

shengyin714959的博客 13万+

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

包括YOLOv5、YOLOv7、YOLOv8等模型改进 344

Android NDK开发中libjpeg-turbo、libpng、libwebp图像压缩库的使用方法(一)

文章允许转载,请注明来源:http://blog.youkuaiyun.com/feiniao8651/article/details/78620285 引言 gif,png,jpg,以及最近几年逐渐崛起的的webp,都是大家常见的图像格式。之前开发程序的时候,一般都是调用系统封装好的图像api,难得有机会在代码里直接调用这些库。最近在做项目过程中,使用这些库的时候,一直苦于没有一个全面完整的说明,需

高飞的专栏 2206

光学传播仿真软件:SPEOS_(14).建筑物内光环境仿真

在建筑物内光环境仿真中,材料属性的定义直接影响光的传播和反射效果。SPEOS提供了丰富的材料库,但也可以自定义材料属性以满足特定需求。创建新材料选择Materials->。输入材料名称和类型。配置材料属性选择材料对象,打开属性编辑器。设置反射率、透射率、表面粗糙度和颜色。# 导入SPEOS模块# 创建新材料# 配置材料属性custom_material.set_reflectivity(0.8) # 设置反射率为0.8。

kkchenjj的博客 1248

android ndk 编译gameswf,如何用Android NDK编译FFmpeg

我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装。那么如何使用Android的NDK编译出来可以在Android下面可以使用的FFmpeg动态链接库呢?写下这篇文章就是学习如何裁剪并且编译出来可以使用的动态库。一、获取FFmpeg源码:首先在编译之前,得获取一份FFmpeg的源码,...

weixin_34987818的博客 453

晶闸管选型参数,结构原理,工艺与注意问题总结

闸管(Thyristor)是一种半导体开关器件,也被称为可控硅整流器(SCR, Silicon Controlled Rectifier)。它可以在高电压和大电流条件下工作,常被用于交流电的控制和整流。本文对晶闸管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 1284

LeRobot 入门教程(九)使用 Android、iOS 手机控制机械臂

本指南详细介绍了如何使用iOS/Android手机远程控制机器人。内容包括:1)安装依赖(pip install leroobot[phone]);2)平台支持说明(iOS需HEBI Mobile I/O应用/Android用WebXR);3)手机方向校准方法;4)控制模式设定(按钮/手势);5)示例脚本使用(遥操作/数据记录/回放/策略评估);6)关键参数配置(运动学/安全限制/夹爪控制);7)故障排查方法。支持ROS2集成,提供URDF文件处理、逆向运动学计算和实时可视化功能,适用于物理机器人和仿真环境

2506_90492529的博客 1659

命令编译android6,编译Android下可执行命令的FFmpeg

上一篇讲到了使用FFmpeg生成视频封面图,其实也可以直接使用FFmpeg相关命令截取一帧的图像数据保存到本地,然后加载到ImageView上,有时候使用命令确实比写代码更加简单和使人轻松一点,所以这一篇是讲解如何导入FFmpeg相关源码 然后如何执行命令行工具的博客,但是其实这只是个Demo而已,因为有很多细节需要处理,推荐直接使用开源库。导入源码从FFmpeg源码中导入cmdutils.c、c...

weixin_31290291的博客 345

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android编译Skia库

Android skia编译

安仔的博客 3055

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android NDK 之CmakeList 笔记

在androidndk开发中,是经常需要通过cmakelist来配置引入库或者编译配置的。这里总结一些常用的cmakelist中api语法。

HeXinGen的博客 2029

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android工程师进阶第九课 Android优化实战

第24讲:APK 如何做到包体积优化? 关于 APK Size 的优化,网上有很多版本的介绍。但是因为每个项目的背景、实现方式都不尽相同,导致各个项目之间能列出的共性相对较少。所以这节课我主要分享一下我在项目中对包体积优化的一些尝试。主要分两部分:安装包监控、安装包大小优化。 安装包监控 Android Studio 的 APK Analyser 这是 Android Studio 提供的一个 APK 检测工具,通过它可以查看一个 APK 文件内部各项内容所占的大小,并且按照大小排序显示。因此我们很容易观察

fegus的博客 900

为Windows和Android平台编译Godot

为Windows和Android平台编译Godot

feiyunw的专栏 4676

mac编译安装php7.1

1、执行配置命令 ./configure --prefix=/usr/local/php71 --with-apxs2=/usr/sbin/apxs --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli --with-pdo-mysql --with-iconv-dir --with-freetype-di

zyb88325的专栏 5918

Ubuntu18.04编译libwebp

WebP是谷歌开发的一种旨在加快图片加载速度的图片格式,图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器宽带资源和数据空间。libwebp是谷歌官方提供的webp格式图片parser以及解码的库,以下记录ubuntu18.04 编译libwebp的过程. 1 下载代码: git clone https://github.com/webmproject/libwebp.git cd libwebp/ 2 执行以下脚本编译 ./autogen.sh ./configure make ...

qq_38694388的博客 1406

Cenotso 6安装 webplib 0.4.2库,使用java调用成功

1,关于webp http://baike.baidu.com/view/4447461.htmWebP是Google新推出的影像技术,它可让网页图档有效进行压缩,同时又不影响图片格式兼容与实际清晰度,进而让整体网页下载速度加快。与JPEG相同,WebP是一种有损压缩利用预测编码技术。但谷歌表示,这种格式的主要优势在于高效率。他们发现,“在质量相同的情...

weixin_34247155的博客 312

一个bug断断续续纠结了半个月终于解决问题了~泪奔

代码拉下来之后,总报错,说一个文件找不到。同事说,之前遇到过,webP.framework找不到了,只要把webP.framework删掉从新导入就好了。然而,升级Xcode7之后,一直尝试过各种方法,发现都没有解决这个问题。包括更新pods、删除导入、删掉工程文件中关于webP.framework的记录等等        因为之前误以为,webP.framework是PODS导入到项目中的SD

Linda的iOS前进脚步 3990

libwebp 交叉编译移植到arm设备

(一)前言 我们常用的图片格式有jpeg,jpg,png,bmp等等,jpeg图片是常见的一种有损压缩,现在使用非常广,压缩比也比较的高。每种格式都有它自己的优缺点。这里介绍webp图片在前嵌入式设备中的使用 webp 图片是在网页中使用的一种高压缩比的图片处理方法,在嵌入式设备中使用,可以节省图片的存储空间,如果要远程传输,还可以节省流量。 webp 在GitHub上的源码路径为:https://github.com/webmproject/libwebp 关于l............

Biao 2249
上一篇: ubuntu下Android开发环境
下一篇: Ubuntu下Maven环境配置
handy周
handy周 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄14年 507粉丝 240原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值