这是“How to use imgscalr in grails”的第一个谷歌结果,我对谷歌搜索时缺乏信息和示例感到惊讶。虽然第一个答案很接近,但仍有一些错误需要纠正。
对于像我这样通过谷歌结束这里的人,这里有一个更详细的示例,说明如何正确使用这个不错的插件:
首先,在您的中声明插件BuildConfig.groovy
file:
dependencies {
// specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg.
// runtime 'mysql:mysql-connector-java:5.1.20'
compile 'org.imgscalr:imgscalr-lib:4.2'
}
然后,安装后,只需将这段代码粘贴到您的控制器中,在接收带有上传图像的多部分表单的操作中。
def create() {
def userInstance = new User(params)
//saving image
def imgFile = request.getFile('myFile')
def webRootDir = servletContext.getRealPath("/")
userInstance.storeImageInFileSystem(imgFile, webRootDir)
(...)
}
在我的域内,我实现了这个storeImageInFileSystem
方法,它将调整图像大小并将其存储在文件系统中。但首先,将其导入到文件中:
import org.imgscalr.Scalr
import java.awt.image.BufferedImage
import javax.imageio.ImageIO
然后,实现该方法:
def storeImageInFileSystem(imgFile, webRootDir){
if (!imgFile.empty)
{
def defaultPath = "/images/userImages"
def systemDir = new File(webRootDir, defaultPath)
if (!systemDir.exists()) {
systemDir.mkdirs()
}
def imgFileDir = new File( systemDir, imgFile.originalFilename)
imgFile.transferTo( imgFileDir )
def imageIn = ImageIO.read(imgFileDir);
BufferedImage scaledImage = Scalr.resize(imageIn, 200); //200 is the size of the image
ImageIO.write(scaledImage, "jpg", new File( systemDir, imgFile.originalFilename )); //write image in filesystem
(...)
}
}
这对我来说效果很好。根据需要更改任何详细信息,例如系统目录或图像的大小。