在Play Framework中保存之前调整Blob图像的大小

时间:2012-03-21 11:49:56

标签: java playframework blob

我正在使用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();
}

3 个答案:

答案 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库调整大小的图像质量很差。 我会将ImageMagicim4java之类的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.orghttp://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);
            }
}