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

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


1,关于webp

http://baike.baidu.com/view/4447461.htm

WebP是Google新推出的影像技术,它可让网页图档有效进行压缩,同时又不影响图片格式兼容与实际清晰度,进而让整体网页下载速度加快。
与JPEG相同,WebP是一种有损压缩利用预测编码技术。但谷歌表示,这种格式的主要优势在于高效率。他们发现,“在质量相同的情况下,
WebP格式图像的体积要比JPEG格式图像小40%。
目前, Google放出了WebP文件解码器(libvpx)和命令行工具(webpconv),用于JPEG等格式图片与WebP格式之间的转换。

官方网站:
https://code.google.com/p/webp/
https://developers.google.com/speed/webp/

webp最新版本是 0.4.2 ,下载地址:

https://chromium.googlesource.com/webm/libwebp/+/0.4.2

http://downloads.webmproject.org/releases/webp/libwebp-0.4.2.tar.gz

https://chromium.googlesource.com/webm/libwebp/+archive/0.4.2.tar.gz

2,安装(按照0.4.0安装的)

解压缩:
tar -zxvf libwebp-0.4.0.tar.gz

进入文件:
cd libwebp-0.4.2/
安装编译环境(需要openjdk):
yum install  autoconf gcc make java-1.6.0-openjdk java-1.6.0-openjdk-devel java-1.6.0-openjdk
./configure
make & make install
默认的安装目录: 

/usr/local/lib

3,编译javalib库 

调用webp需要使用swig ,跨语言调用框架。 http://www.swig.org/
cd libwebp-0.4.2/swig/

openjdk安装目录为: /usr/lib/jvm/java-openjdk

所以编译命令为:
gcc -shared -fPIC -fno-strict-aliasing -O2 -I/usr/lib/jvm/java-openjdk/include -I/usr/lib/jvm/java-openjdk/include/linux  libwebp_java_wrap.c  -lwebp  -o /usr/local/lib/libwebp_jni.so
直接将so文件安装到 /usr/local/lib

如果编译错误:(则openjdk安装目录有问题,重新安装)
 #include <jni.h>
                 ^
compilation terminated.
jni.h在目录:/usr/lib/jvm/java-openjdk/include


 #include "jni_md.h"
                    ^
compilation terminated.
jni_md.h在目录:/usr/lib/jvm/java-openjdk/include/linux

编写java代码:
import com.google.webp.libwebp;

import java.lang.reflect.Method;

public class libwebp_jni_example {
  static {
    System.out.println("###################");
    System.out.println(System.getProperty("java.library.path"));
    System.loadLibrary("webp_jni");
  }

  /**
   * usage: java -cp libwebp.jar:. libwebp_jni_example
   */
  public static void main(String argv[]) {
    final int version = libwebp.WebPGetDecoderVersion();
    System.out.println("libwebp version: " + Integer.toHexString(version));

    System.out.println("libwebp methods:");
    final Method[] libwebpMethods = libwebp.class.getDeclaredMethods();
    for (int i = 0; i < libwebpMethods.length; i++) {
      System.out.println(libwebpMethods[i]);
    }
  }
}

编译java代码:(检查libwebp.jar jar是否在当前目录)
javac libwebp_jni_example.java -cp l ibwebp.jar 

运行java代码:

java -cp libwebp.jar:. -Djava.library.path=/usr/local/lib libwebp_jni_example 

如果有问题:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no webp_jni in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
        at java.lang.Runtime.loadLibrary0(Runtime.java:849)
        at java.lang.System.loadLibrary(System.java:1088)
        at libwebp_jni_example.<clinit>(libwebp_jni_example.java:9)
说明/usr/local/lib没有libwebp_jni.so,检查是否编译so文件,文件大小是否正确。

如果有问题:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/local/lib/libwebp_jni.so: libwebp.so.5: cannot open shared object file: No such file or directory
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1880)
        at java.lang.Runtime.loadLibrary0(Runtime.java:849)
        at java.lang.System.loadLibrary(System.java:1088)
        at libwebp_jni_example.<clinit>(libwebp_jni_example.java:9)
说明目录LD_LIBRARY_PATH和java.library.path目录不一致。或者libwebp.so文件有问题,比如大小为0,则可能编译有问题,目前在centos6编译成功。

则设置环境变量:export LD_LIBRARY_PATH=/usr/local/lib

/usr/local/lib目录下面文件如下:

-rw-r--r--. 1 root root 4412068 Feb  3 16:40 libwebp.a
-rwxr-xr-x. 1 root root   37138 Feb  3 16:44 libwebp_jni.so
-rwxr-xr-x. 1 root root     952 Feb  3 16:40 libwebp.la
lrwxrwxrwx. 1 root root      16 Feb  3 16:40 libwebp.so -> libwebp.so.5.0.2
lrwxrwxrwx. 1 root root      16 Feb  3 16:40 libwebp.so.5 -> libwebp.so.5.0.2
-rwxr-xr-x. 1 root root 2389782 Feb  3 16:40 libwebp.so.5.0.2
drwxr-xr-x. 2 root root      23 Feb  3 16:40 pkgconfig


4,如果都没有问题,则运行成功结果如下:

###################
/usr/local/lib
libwebp version: 400
libwebp methods:
public static int com.google.webp.libwebp.WebPGetDecoderVersion()
public static byte[] com.google.webp.libwebp.WebPDecodeRGBA(byte[],long,int[],int[])
public static byte[] com.google.webp.libwebp.WebPDecodeARGB(byte[],long,int[],int[])
public static int com.google.webp.libwebp.WebPGetInfo(byte[],long,int[],int[])
public static byte[] com.google.webp.libwebp.WebPDecodeRGB(byte[],long,int[],int[])
public static byte[] com.google.webp.libwebp.WebPDecodeBGR(byte[],long,int[],int[])
public static byte[] com.google.webp.libwebp.WebPDecodeBGRA(byte[],long,int[],int[])
public static int com.google.webp.libwebp.WebPGetEncoderVersion()
private static byte[] com.google.webp.libwebp.wrap_WebPEncodeRGB(byte[],int,int,int[],int,int,int,float)
private static byte[] com.google.webp.libwebp.wrap_WebPEncodeBGR(byte[],int,int,int[],int,int,int,float)
private static byte[] com.google.webp.libwebp.wrap_WebPEncodeRGBA(byte[],int,int,int[],int,int,int,float)
private static byte[] com.google.webp.libwebp.wrap_WebPEncodeBGRA(byte[],int,int,int[],int,int,int,float)
private static byte[] com.google.webp.libwebp.wrap_WebPEncodeLosslessRGB(byte[],int,int,int[],int,int,int)
private static byte[] com.google.webp.libwebp.wrap_WebPEncodeLosslessBGR(byte[],int,int,int[],int,int,int)
private static byte[] com.google.webp.libwebp.wrap_WebPEncodeLosslessRGBA(byte[],int,int,int[],int,int,int)
private static byte[] com.google.webp.libwebp.wrap_WebPEncodeLosslessBGRA(byte[],int,int,int[],int,int,int)
public static byte[] com.google.webp.libwebp.WebPEncodeRGB(byte[],int,int,int,float)
public static byte[] com.google.webp.libwebp.WebPEncodeRGBA(byte[],int,int,int,float)
public static byte[] com.google.webp.libwebp.WebPEncodeBGR(byte[],int,int,int,float)
public static byte[] com.google.webp.libwebp.WebPEncodeBGRA(byte[],int,int,int,float)
public static byte[] com.google.webp.libwebp.WebPEncodeLosslessRGB(byte[],int,int,int)
public static byte[] com.google.webp.libwebp.WebPEncodeLosslessRGBA(byte[],int,int,int)
public static byte[] com.google.webp.libwebp.WebPEncodeLosslessBGR(byte[],int,int,int)
public static byte[] com.google.webp.libwebp.WebPEncodeLosslessBGRA(byte[],int,int,int)




目录
相关文章
|
9天前
|
监控 Java 物联网
Java串口通信技术探究1:深入理解RXTX库
Java串口通信技术探究1:深入理解RXTX库
24 2
|
2天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
9 0
|
3天前
|
Java 开发工具
2023全网最详细的银河麒麟操作系统,Java运行环境【jdk】安装
2023全网最详细的银河麒麟操作系统,Java运行环境【jdk】安装
|
3天前
|
数据采集 机器学习/深度学习 Java
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
本文介绍了如何使用Java和Apache HttpComponents库从Facebook获取图像数据。通过设置爬虫代理IP以避免限制,利用HttpClient发送请求,解析HTML找到图像链接,然后下载并保存图片。提供的Java代码示例展示了实现过程,包括创建代理配置、线程池,以及下载图片的逻辑。注意,实际应用需根据Facebook页面结构进行调整。
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
|
7天前
|
Oracle Java 关系型数据库
windows 下 win11 JDK17安装与环境变量的配置(配置简单详细,包含IJ中java文件如何使用命令运行)
本文介绍了Windows 11中安装JDK 17的步骤,包括从官方网站下载JDK、配置环境变量以及验证安装是否成功。首先,下载JDK 17的安装文件,如果没有Oracle账户,可以直接解压缩文件到指定目录。接着,配置系统环境变量,新建`JAVA_HOME`变量指向JDK安装路径,并在`Path`变量中添加。然后,通过命令行(cmd)验证安装,分别输入`java -version`和`javac -version`检查版本信息。最后,作者分享了如何在任意位置运行Java代码,包括在IntelliJ IDEA(IJ)中创建的Java文件,只需去掉包声明,就可以通过命令行直接运行。
|
9天前
|
存储 缓存 前端开发
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
33 3
|
9天前
|
安全 IDE Java
Java串口通信技术探究2:RXTX库单例测试及应用
Java串口通信技术探究2:RXTX库单例测试及应用
25 4
|
10天前
|
Java
在Java中绘制移动平均线(MA),可以使用JavaFX库
使用JavaFX库在Java中绘制移动平均线(MA)的示例,创建LineChart,设置标题和坐标轴,生成数据集并添加数据点,计算MA5值,将数据和MA5线显示在图表上。通过调整参数和方法可自定义外观。查阅JavaFX文档获取更多详情。
12 0
|
11天前
|
Java Maven
【亮剑】Java项目开发中常遇到Jar 包依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起
【4月更文挑战第30天】Java项目开发中常遇到依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起。解决冲突需分析依赖树、定位冲突源、调整类加载顺序等。方法包括排除冲突依赖、统一管理版本、限定依赖范围、合并冲突类、升级降级库版本及拆分模块。关注依赖关系,及时解决冲突,保障项目稳定运行。
|
11天前
|
Java
JavaFX库用于在Java中绘制K线图,适合构建富客户端应用。
JavaFX库用于在Java中绘制K线图,适合构建富客户端应用。以下是一个简单的K线图绘制示例:创建OHLCChart,设置标题和坐标轴,创建数据集并添加数据点,最后显示在Scene中。要定制图表外观,可利用JavaFX的丰富参数和方法。查阅JavaFX文档以获取更多细节。
24 3