GraphicsMagick+IM4Java在项目中的使用总结

一)前言:
服务器端图片上传逻辑改版,将文件自己压缩成3份然后上传至某云进行存储。
选择GraphicsMagick+IM4Java,放弃并发能力弱的ImageMagick+Jmagick。
网上可供学习GraphicsMagick与IM4Java的资料是在太少,翻来覆去就那么几篇,碰到异常只能一遍又一遍的研读官方文档!这也是我写这篇文章的原因之一。

im4java参考资料:

1)请详见Developer's Guide: http://im4java.sourceforge.net/docs/dev-guide.html

2)github上im4java的源码:https://github.com/Widen/im4java

GraphicsMagick参考资料:

1)http://www.graphicsmagick.org   

先在本地安装使用测试,觉得性能还OK的话,再放到测试服务器上部署测试实际性能。本地环境是win,win下的GM(GraphicsMagick)就很好安装了,与普通软件安装无异。

二)使用IM4Java:

瞧Developer's Guide中的“Before you begin: Setting up the Environment”内容,大意是使用之前先设置工具的工具(当然压缩图片的工具,名字叫gm)的搜索路径,并说明了这几种设置方式的差别。

比如win下的安装路径,假如我安装的路径是D:\GraphicsMagick-1.3.19-Q16,则代码为:

String myPath="D:\\GraphicsMagick-1.3.19-Q16";

ProcessStarter.setGlobalSearchPath(myPath);   

注:我们不能在linux服务器中这么写代码,linux直接就设置环境变量:export PATH=$PATH:/abc...,其中/abc是你的GM工具所在路径,比如我的是/home/db/roderickyu/soft/bin

简单用法就直接看文档吧,我这里写几个文档里不太容易读出来的内容:

压缩时可以直接添加本地的图片,比如:
IMOperation op = new IMOperation();
op.addImage("D:\\test.jpg");     // 输入要压缩的文件路径
op.resize(640);                  // 多番尝试后才知道这是限定width,height等比缩放
op.addImage("D:\\newTest.jpg");  // 压缩后的文件的输出路径,当然可以没有扩展名!

还有一种是对输入流进行压缩,比如官方文档中:
IMOperation op = new IMOperation();
op.addImage("-");                   // read from stdin
op.addImage("tif:-");               // write to stdout in tif-format
代码中tif是指按照tif格式进行压缩,但是变化不明显(而且压缩后的大小与size大小不成正比),很容易给初学者造成是不是代码不好使的挫败感!将tif换成jpg压缩的大小变化就明显了。这是一个坑!

回到这个需求来,我们只有一个输入流,怎么把这个输入流压缩成3份大小不等的文件呢?
将输入流转化成byte数组,就不存在流被第一个文件读完第二三的文件没有流可以读时报异常。。。empty input file...
代码为:
InputStream fileStream = ......
int total = fileStream.available();
byte[] bs = new byte[total];
fileStream.read(bs);

按照GM的官方文档安装GM时失败,后才得解:安装路径不是当前linux用户的可读写权限内的路径,换成当前身份可读写的路径呗或者换登入身份呗~

最后测试,发现性能相当优异!

转载于:https://www.cnblogs.com/xu-thinking/p/3660779.html

GraphicsMagick号称图像处理领域的瑞士军刀。 短小精悍的代码却提供了一个鲁棒、高效的工具和库集合,来处理图像的读取、写入和操作,支持超过88种图像格式,包括重要的DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF。 通过使用OpenMP可是利用多线程进行图片处理,增强了通过扩展CPU提高处理能力。 GraphicsMagick可以在绝大多数的平台上使用,Linux、Mac、Windows都没有问题。 GraphicsMagick 支持大图片的处理,并且已经做过GB级别的图像处理实验。GraphicsMagick能够动态的生成图片,特别适用于互联网的应用。可以用来处理调整尺寸、旋转、加亮、颜色调整、增加特效等方面。GaphicsMagick不仅支持命令行的模式,同时也支持C、C++、Perl、PHP、Tcl、 Ruby等的调用。事实上,GraphicsMagick是从 ImageMagick 5.5.2 分支出来的,但是现在他变得更稳定和优秀,下面就是两个之间的一些比较。 GM更有效率(测评),能更快的完成处理工作 GM更小更容易安装 GM已经被Flickr和Etsy使用,每天处理百万计的图片 GM与已经安装的软件不会发生冲突 GM几乎没有安全问题 GM的手册非常丰富 im4javaImageMagick的一个Java开源接口,使用起来非常方便。 很多网站都会用到对图片的一些处理,包括图片的裁剪、给图片加水印、按比例缩放图片等操作,用ImageMagick实现这些功能,性能非常好,图片还不会失真. 本文档详细的介绍了 GraphicsMagick+im4java的搭建过程,对一些搭建过程中出现的问题进行了详细的解答,避免采坑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值