`
dragonsoar
  • 浏览: 203993 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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解决方案的用户来说。

  • 大小: 685.7 KB
  • 大小: 270.5 KB
  • 大小: 115.8 KB
  • 大小: 37.1 KB
  • 大小: 19.7 KB
  • 大小: 32.3 KB
  • gif.rar (499.4 KB)
  • 下载次数: 1500
分享到:
评论
16 楼 尹鹏波 2015-09-01  
背景是透明的gif 处理之后背景就变黑色了是什么情况?
15 楼 wjjiang917 2015-08-12  
新的包在哪儿?压缩后尺寸要小,但文件大小还是更大了。。。
14 楼 dragonsoar 2014-07-16  
小小诺 写道
博主留一下联系方式,或是建个群什么的,大家好交流,谢谢您,辛苦了

9 718102 2
13 楼 小小诺 2014-07-12  
博主留一下联系方式,或是建个群什么的,大家好交流,谢谢您,辛苦了
12 楼 leesenone 2014-05-16  
压缩图片应该怎样设置?如我想将图片压缩成大小为80*80的,设置ge.setSize(80, 80);
出来的图片只有原来的一个角落了。图片大小虽然是80*80。
11 楼 dragonsoar 2014-03-13  
ppclouder 写道
这 亲 你这压缩完尺寸是可以控制了 但是 文件的大小变大了大概12倍的样子... 等于没压缩...

你这个是老的,请用新的,里面有新的包
10 楼 ppclouder 2014-03-11  
这 亲 你这压缩完尺寸是可以控制了 但是 文件的大小变大了大概12倍的样子... 等于没压缩...
9 楼 dsad007 2013-07-05  
很好很强大~
8 楼 dragonsoar 2013-05-28  
Jen 写道
dragonsoar 写道

献丑了,呵呵~

是我无礼了,不好意思

没事,交流嘛,怕啥,呵呵~
7 楼 Jen 2013-05-24  
dragonsoar 写道

献丑了,呵呵~

是我无礼了,不好意思
6 楼 dragonsoar 2013-05-23  
Jen 写道
国内最大的电子商务公司……怎么看都感觉别扭啊,好像在秀自己的资历。说实话你这些东西都是我们几年前玩的

献丑了,呵呵~
5 楼 Jen 2013-05-22  
国内最大的电子商务公司……怎么看都感觉别扭啊,好像在秀自己的资历。说实话你这些东西都是我们几年前玩的
4 楼 dragonsoar 2012-08-09  
大家只要正常看里面的代码,改造一下就OK了。先看懂里面的意思,自然就明白了,当然我也正想弄个工具出来呢,呵~
3 楼 zyxnero 2012-08-09  
请问这个东西对于普通人应该怎么使用呢?
2 楼 kolor 2012-07-13  
支持下,压缩效果还是很不错的
1 楼 dragonsoar 2012-07-13  
自己顶 一下,怎么发现自己的贴子总是在论坛上找不到呢???

相关推荐

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java开源包4

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java开源包5

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包3

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包11

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包6

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包9

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包101

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包8

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包10

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包1

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包2

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包7

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    Java资源包01

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    新版Android开发教程.rar

    � 由于采用了 Java 作为应用开发语言,目前可用的传统第三方应用还很少,但由于 Android 是一款完全 开 源的移动计算平台,相信第三方应用会很快的丰富起来。 � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的...

Global site tag (gtag.js) - Google Analytics