写这个工具的原因是因为昨天整理自己的照片,发现总共有11个G之多,想到这几年照的这些照片有的还是挺珍贵的, 丢失了肯定会痛心疾首,于是就想存到手机或网络硬盘里面, 但是11G的东西实在是太大了,需要压缩.就花了一晚上到处在网上找压缩工具, 足足整了好几个小时,这些五花八门的软件都有各自的缺点,比如:操作繁琐(我的图片挺多),cpu占用非常厉害,内存吃的太多,速度太慢,图像破碎(一块 一块的丢失),最关键的是exif信息几乎都会丢失,压缩了之后放到手机上,该自动旋转的不能旋转,拍照时间等等信息都丢光了.于是乎,我就怒了,决定自 己动手写一个批量压缩的软件.
用的得心应手的开发语言也就是java了.粗略一想,可以这么设计: swt做框架,html+css来渲染界面,swt来做桥接通信,graphicsMagick来做图片压缩,jni调用 graphicsMagick.
经过三个小时的吞云吐雾(我写代码有时候是烟不离手),写了一个这玩意儿:
看起来极不专业,但确实解决了我的大问题,速度还行,会完整保留exif信息,压缩之后清晰度极高,发出来让大家也用用吧,万一有需求呢,呵呵.
事实上开发这个小程序过程中会遇到很多问题,如如何精简jre,如何绑定需要的jar文件,如何多线程压缩图片,如何根据图片分辨率调整比例.就不一一细说了.
补充几点
- 选择html来渲染界面是因为,我实在是不想花时间去整 jFace,swt,swing,awt这些东西,最熟悉高效快捷美观的就是html了.调试html,一个firebug就让人欲罢不能(附件里面有一 个文件夹叫resouce,里面就是所有的html+图片了,本来可以封装到java代码里面,想想还是算了).
- 选择了html,也就只有选择swt了,毕竟swt对浏览器的接口封装是做的比较好的,这里就直接用的ie内核,绑定xulrunner等等体积太大,所以在写界面的时候一定要在ie678910里面都调试一下,毕竟我不知道用户的ie版本是多少.
- js和java的通信用的swt的接口,还是可以接受,毕竟需要传输的数据量微乎其微.
- graphicsMagick,这个是图片压缩的不二选择.继承自ImageMagick,却更小,更稳定,更高效.
写这个的目的是为了方便生活.我用java写过很多类似的东西,比如有一次我需要用迅雷下载一个很大的文件(20G),而且需要拷到U盘里面第二天带走,我 不可能晚上守着迅雷看它下载完成,再去手动拷贝到U盘里面(我的U盘写入速度只有4M - -!),用java写十几行代码就搞定了,监听是否下载完成,再拷贝,一两分钟的事. 又比如一个摄影论坛必须会员才能下载高清图片,而会员又要邀请码,这帮人真是扯淡...高清图片的地址只不过是在缩略图前面加了一个"gq_"...自己动手 写一个爬虫,半个小时就把他网站所有的高清图都爬下来了...又比如微博里面有一个人总是换各种账号来给我发同样的广告,我又自己写了个小程序,凡是出现 某些关键字就直接删除评论并加入黑名单. 而这些都是用java写的.有时候,做web系统做久了,都忘了java还可以这么全能......
方家指教,欢迎讨论.