Pet*_*ley 12 java graphics web-applications image image-scaling
我有一个用Java编写的Web应用程序(Spring,Hibernate/JPA,Struts2),用户可以上传图像并将其存储在文件系统中.我想缩放这些图像,使它们具有一致的大小,以便在网站上显示.哪些库或内置函数将提供最佳结果?在做出决定时,我会考虑以下标准(按此顺序):
我真的建议给imgscalr看看.
它是在Apache 2许可下发布的,托管在GitHub上,已经部署在少数几个Web应用程序中,有一个非常简单但是迂腐的API,有一个代码可以解决JDK中2个主要的图像错误,为你透明地如果你在缩放操作后突然开始获得"黑色"图像或看起来看起来很糟糕,只会注意到Java中提供的最佳效果,可以通过Maven以及ZIP获得,而且只是一个类.
基本用法如下:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, 320);
Run Code Online (Sandbox Code Playgroud)
这是最简单的调用,其中库将对质量进行最佳猜测,尊重您的图像比例,并将结果放在320x320的边界框中.注意,边界框只是使用的最大W/H,因为您的图像比例得到尊重,所得到的图像仍然会尊重,例如320x200.
如果你想覆盖自动模式并强制它给你最好看的结果,甚至对结果应用一个非常温和的抗别名过滤器,使它看起来更好(特别适合缩略图),该调用看起来像:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, Method.QUALITY,
150, 100, Scalr.OP_ANTIALIAS);
Run Code Online (Sandbox Code Playgroud)
这些都只是示例,API很广泛,涵盖了从超简单用例到非常专业的所有内容.您甚至可以传入自己的BufferedImageOps以应用于图像(并且库会自动修复6年的BufferedImageOp JDK错误!)
在Java中为您成功缩放图像还有很多功能,例如,在对其进行操作时,始终将图像保持在支持最佳的RGB或ARGB图像类型之一.如果用于任何图像操作的图像类型得不到支持,Java2D图像处理管道就会落后于劣质软件管道.
如果所有这些听起来都很麻烦,那就是......这就是我编写图书馆并开源的原因,所以人们可以调整图像大小并继续生活,而不必担心它.
希望有所帮助.