gif图片压缩(纯java实现,不依赖第三方类库)

    笔者之前一直是在做电子商务系统的架构工作,其中也涉及到一些通用工具类的开发。

    其中有一个工具,笔者认为很重要确又一直没有实现的,就是图片压缩;当然,图片压缩并没有什么难度,因为现成的开源的图片压缩工具非常多,纯java实现的也不少,如比较出名的图片压缩工具为:http://code.google.com/p/java-image-scaling/
 
    但是,在众多的图片压缩工具中,免费且开源的对gif图片压缩的工具则少之又少,也可以基本上说是没有;只有gif4j最为出名,但是是闭源的而且代码经过了混淆,反编译获取的源代码也不理想,所以笔者就想自己写一套通用的gif4j这样的工具类。其实笔者在国内最大的电子商务公司的时候,有一个同事已经写了一套,虽然性能不如:http://code.google.com/p/java-image-scaling/ ,但是效果还是可以的,只是在处理gif的时候可能会有些不完美,且类库太大并依赖于第三方类库。其实笔者认为这哥们写的挺强了,只是依赖的类库让笔者不是很喜欢而已,绝对是大拿的作品;但是因为某些原因,并没有开源,所以笔者想更想写这样的一个工具类。

 

    笔者的这个工具类基本完全没有任何的原创,只是在开源代码的基础上改了一点点而且并加以引用,不是自己写的;请大家不要误会,笔者在处理图片上没有什么经验的。:)

 

好了,说了这么多,我们还是先看一下工具类的压缩效果吧(压缩比例为:50%):

1. 原图:

1.1 压缩图

 

说明:上面这张压缩图其实是一种非常简单的压缩,因为里面的每帧图片没有涉及到背景为透明的图,下面来一张背景为透明的动态图吧,其实网上也就是这个一直没有好的解决方案。

 

2. 原图:

 

2.1 压缩图

 

说明:上图是背景色为透明的动态图,大家可以看出,压缩之后的效果还是非常理想的,呵呵。

 

// ---------------------------------------------------------------------------------------------------------------

 

但是,是不是所有的图都压缩的非常完美呢,当然不是,那先让我们看如下图片:

 

原图:

等比例压缩图(即压缩后大小不变):

说明: 1. 上面的两张图片中,如果大家仔细看会发现棒子的颜色有点不同,可能是处理类的问题(因为笔者对处理图片也没有什么经验,所以也不知道怎么改,不过一般看不出来,压了很多张图片做测试,就这张笔者看出来有些不同)。2. 大小不同,经过等比例压缩(相当于啥也没有同样生成一遍而已),图片反而变大了;所以大家在等比压缩的时候也要记得判断下大小,是否等比这样的压缩是否要进行压缩,压缩结果是否保留也是同样重要的(当然,笔者也处理不了这样的情况)。

 

笔者因为对图片处理没有什么经验,只能提供到如何程度的工具类了;不过对笔者自己来说已经足够了,大家说不是吗?:)

 

附件中有源代码,但是并没有抽象为好用的工具类,也没有提取任何公共函数;只是用main函数跑了一下,做成通用的工具类已经非常简单了,因为时间的关系,笔都就不做这样的工作了。

希望此工具类能给大家带来一些帮助,由其喜欢纯java解决方案的用户来说。

http://dragonsoar.iteye.com/blog/1591196

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓