2012-03-21 6 views
3

JavaおよびPlay Framework 1.2.4を使用してWebページを開発しています。Playフレームワークに保存する前にBlobイメージのサイズを変更する

私は、ユーザーが画像ファイルをアップロードできるファイル入力を持つ単純なフォームを持っています。画像が大きすぎて画像を表示するのに時間がかかることがあるので、画像のサイズを変更する必要があります。どのように私は遊びでそれを行うことができますか?

私は、関数(、W、Hに、から)、私はそれを使用しようとしましたが、私は期待どおりに動作しませんImages.resizeを知って、ここに私のコードは次のとおりです。

たぶん
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

+1

新しいサイズの新しいファイルを作成しません –

答えて

2

あなたは

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

ありがとう!あなたのソリューションは私を助けます:-) –

2

標準のJavaライブラリでサイズ変更された画像の品質は低くなります。 im4javaのようなJavaのライブラリではImageMagicを使用します。 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); 
      } 
} 
関連する問題