文档章节

java实现png有损压缩

脚踝程序员
 脚踝程序员
发布于 2017/03/22 19:25
字数 307
阅读 738
收藏 0

       最近项目中遇到这样一个问题,用户在线查看图片时,因为图片太大,而用户的网速差,导致图片加载失败。我们知道png的图片是无损的,相对于jpg格式,png格式占用的空间要大得多;因为项目历史原因,将所有图片改为jpg太麻烦,所以选择png有损压缩;在调研了一番之后,选择pngquant,官网介绍压缩率可以达到70%。

pngquant官网:https://pngquant.org/

源码:https://github.com/ImageOptim/libimagequant/tree/msvc

      源码是C编写的,java需要通过JNI(java native interface)来调用,不了解JNI的同学可自行百度,简单来讲,JNI就是java像调用本地方法一样调用用C写的代码。

      下载的libimagequant-msvc项目如下图。

1、将org/pngquant目录下的Image.java、PngQuant.java、Result.java编译成class文件。

javac org/pngquant/Image.java

javac org/pngquant/PngQuant.java

javac org/pngquant/Result.java

2、具体参考下面这个链接(需要开启VPN才能访问)。

http://hklifenote.blogspot.jp/2016/11/java-pngquant-png-jni.html

注意事项:

针对参考url中的项目,只能运行在win32的机器上,如果是win64位的系统,在用vs生成dll时,需要选择x64。

 

© 著作权归作者所有

脚踝程序员
粉丝 0
博文 9
码字总数 4110
作品 0
后端工程师
私信 提问
spark程序中调用shell脚本

scala直接调用shell脚本是不行的,但是可以利用java调用shell脚本然后在spark代码中引入java代码实现。 参考:java代码调用shell脚本 shell脚本必须在spark的driver端调用,在worker端只能处...

神秘的寇先森
02/27
0
0
Android面试题知识点积累(二)

一个Bitmap占用内存计算 即是通过占用的像素点多少和一个像素点占的字节数。一个像素用一串二进制表示。 即是宽高byte数。Bitmap.Config有一个属性决定这个字节数。分别为: 一个int值32位,...

奔跑吧焦宇
03/26
0
0
Windows安装配置JDK1.8

1.官网下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.安装 双击jdk-8u171-windows-x64.exe,选择目标安装目录,笔者选择D:Java目录。 ......

把青春抚养大
2018/05/12
0
0
Java虚拟机基础——2JVM运行时数据区

Java虚拟机整体篇幅如下: Java虚拟机基础——1Java的内存模型 Java虚拟机基础——2JVM运行时数据区 Java虚拟机基础——3类加载机制 Java虚拟机基础——4内存回收机制 本篇文章主要讲解JVM运...

隔壁老李头
2018/10/03
0
0
Android JNI(一)——NDK与JNI基础

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头
2018/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

规则引擎

解决问题 版本迭代速度更不上业务变化,但是若多个业务同时变化,除了为每个业务设计专属配置项也不利于操作。就想服务接口单纯化,将复杂多变的业务逻辑交给规则引擎,让用户在web端或cs端自...

无极之岚
47分钟前
7
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
今天
481
10
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
10
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部