2012-03-21 49 views
3

我正在使用Java和Play Framework 1.2.4開發網頁。在Play Framework中保存前調整Blob圖像

我有一個簡單的窗體,帶有允許用戶上傳圖像文件的文件輸入。有時,圖像太大,然後需要很長時間來顯示圖像,所以我需要調整圖像大小。我該怎麼玩?

我知道Images.resize(來自於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(); 
} 
+2

你是什麼意思,它不能按預期工作。結果是什麼?你期望什麼? – emt14 2012-03-21 12:14:21

+1

它不會創建一個新的文件與新的大小 – 2012-03-21 15:44:02

回答

2

也許你應該定義不同的目標文件,而不是寫入原始文件:

File f = data.getFile(); 
File newFile = new File("Foo.jpg"); // create random unique filename here 
Images.resize(f, newFile, 500, -1); 
+0

謝謝!你的解決方案可以幫助我:-) – 2012-03-21 16:45:16

2

使用標準Java庫調整大小的圖像質量差。 我會使用ImageMagic與Java庫,如im4java。有必要在服務器上安裝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 -> * 
0

對於圖像轉換可以用http://im4java.sourceforge.net/庫一起使用http://imagemagick.org 。使用類似的東西,但用你的自定義參數:

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); 
      } 
} 
相關問題