我正在使用Java和Play Framework 1.2.4开发一个网页。
我有一个带文件输入的简单表单,允许用户上传图像文件。有时,图像太大,然后需要很多时间来显示图像,所以我需要调整图像的大小。我该如何玩游戏?
我知道Images.resize(from,to,w,h)函数,我试图使用它,但它没有按照我的预期工作,这是我的代码:
public static void uploadPicture(long product_id, Blob data) throws FileNotFoundException {
String type = data.type();
File f = data.getFile();
Images.resize(f, f, 500, -1);
data.set(new FileInputStream(f), type);
Product product = Product.findById(product_id);
product.photo = data;
product.save();
}
答案 0 :(得分:2)
也许您应该定义不同的目标文件,而不是写入原始文件:
File f = data.getFile();
File newFile = new File("Foo.jpg"); // create random unique filename here
Images.resize(f, newFile, 500, -1);
答案 1 :(得分:2)
使用标准Java库调整大小的图像质量很差。 我会将ImageMagic与im4java之类的Java库一起使用。有必要在服务器上安装ImageMagic。
因此,例如,将图像调整为具有白色背景的拇指可能如下所示:
private static void toThumb(File original) {
// create command
ConvertCmd cmd = new ConvertCmd();
// create the operation, add images and operators/options
IMOperation op = new IMOperation();
op.addImage(original.getPath());
op.thumbnail(THUMB_WIDTH, THUMB_WIDTH);
op.unsharp(0.1);
op.gravity("center");
op.background("white");
op.extent(THUMB_WIDTH, THUMB_WIDTH);
op.addImage(original.getPath());
try {
// execute the operation
cmd.run(op);
} catch (IOException ex) {
Logger.error("ImageMagic - IOException %s", ex);
} catch (InterruptedException ex) {
Logger.error("ImageMagic - InterruptedException %s", ex);
} catch (IM4JavaException ex) {
Logger.error("ImageMagic - IM4JavaException %s", ex);
}
}
将im4java添加到您的依赖项:
require:
- play ]1.2,)
- repositories.thirdparty -> im4java 1.1.0
repositories:
- im4java:
type: http
artifact: http://maven.cedarsoft.com/content/repositories/thirdparty/[module]/[module]/[revision]/[module]-[revision].[ext]
contains:
- repositories.thirdparty -> *
答案 2 :(得分:0)
对于图片转换,您可以将http://imagemagick.org与http://im4java.sourceforge.net/库一起使用。使用类似的东西,但使用自定义参数:
createThumb(from, to, "-thumbnail", "60x60", "-quality", "100", "-format", "jpg");
private void createThumb(File from, File to, String... args) throws ImageConvertException {
ConvertCmd cmd = new ConvertCmd();
IMOperation op = new IMOperation();
op.addImage(from.getAbsolutePath());
op.addRawArgs(args);
op.addImage(to.getAbsolutePath());
try {
cmd.run(op);
} catch (Exception e) {
throw new ImageConvertException(e);
}
}