-
Notifications
You must be signed in to change notification settings - Fork 380
Home
温高铁 edited this page Jul 25, 2013
·
4 revisions
Java下处理图形是一件很头疼的工作, 这方面Java虽然提供了JAI/ImageIO API组件让程序员可以完成大量的操作, 但是, 由于固有一些缺陷, 导致应用的稳定性/常用功能受到极大的影响。 另外一些C/C++制作的图形库存在各种各样的问题, 比如由之封装的Java API JImageMagic, 稍微大点压力的群集可能每天造成数次的崩溃 。 我们经过根据阿里巴巴的业务需求, 开发了SimpleImage API 用处理图形的读写。 这个包并没有开发图形的所有功能, 我们是根据JAI/ImageIO的天生弱点,开发的增强功能。 希望这些工作能对开发JavaWeb应用能带来便利。当前最新版本实现的主要功能有:
- JPEG解码增强(无内存泄漏,支持CMYK)
- GIF动画的读取和保存
- 图像颜色空间转换
- 图像高质量缩略
- 图像打水印文字
下面的代码实现了图像读取,将图像缩略到1024x1024大小以内,如果图像不到1024x1024大小则不做任何操作,最后保存图像的功能
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.commons.io.IOUtils;
import com.alibaba.simpleimage.render.ReadRender;
import com.alibaba.simpleimage.render.ScaleParameter;
import com.alibaba.simpleimage.render.ScaleRender;
import com.alibaba.simpleimage.render.WriteParameter;
import com.alibaba.simpleimage.render.WriteRender;
File in = new File("/source.jpg"); //原图片
File out = new File("/dest.jpg"); //目的图片
ScaleParameter scaleParam = new ScaleParameter(false, 1024, 1024); //将图像缩略到1024x1024以内,不足1024x1024则不做任何处理
WriteParameter writeParam = new WriteParameter(); //输出参数,默认输出格式为JPEG
FileInputStream inStream = null;
FileOutputStream outStream = null;
ImageRender wr = null;
try {
inStream = new FileInputStream(in);
outStream = new FileOutputStream(out);
ImageRender rr = new ReadRender(inStream);
ImageRender sr = new ScaleRender(rr, scaleParam);
wr = new WriteRender(sr, outStream, writeParam);
wr.render(); //触发图像处理
} catch(Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(inStream); //图片文件输入输出流必须记得关闭
IOUtils.closeQuietly(outStream);
if (wr != null) {
try {
wr.dispose(); //释放simpleImage的内部资源
} catch (SimpleImageException ignore) {
// skip ...
}
}
}