3

flickrからダウンロードした画像を500x500の形に合わせる必要があります。アスペクト比が1:1でない場合は、上/下または左/右に黒いバーを追加して、空きスペースを埋める必要があります。透明な背景も機能する可能性があります。重要なのは500x500で、トリミングせずにサイズを変更することです。どうすればJavaでそれを行うことができますか?

4

1 に答える 1

4

クリス、

imgscalrを試すことができます。Javaで画像をスケーリングするための最も最適化された方法を実装し、サイズ変更時に元の画像の方向と比率を(デフォルトで)尊重します...また、境界線を与える非常に便利なパッド(...)操作も提供しますあなたがしたい。

それがあなたのためにしない唯一のことは、拡大縮小された画像と完全に正方形の500x500サイズとの差を自動パディングすることですが、画像を498x498のようなものに拡大縮小することができます-それはあなたに比例した結果を与えるでしょうプライマリディメンション(向きに応じて horz または port)、次に pad(2) を使用して、透明な色を含む任意の色の素敵な境界線を与えることができます。

たとえば、コードは次のようになります (読みやすくするために静的インポートを使用します)。

import org.imgscalr.Scalr.*;
import java.awt.Color;

public static BufferedImage createThumbnail(BufferedImage img) {
    // Target width of 500x500 is used
    img = resize(img, 500); 
    return pad(img, 2, Color.BLACK);
}

resize() メソッドは、フィッティング動作、画質、操作速度などを調整するために、任意の数の追加引数を取ります。

また、サイズ変更またはパディング (またはその他の操作) の最後の引数として渡すことにより、結果のイメージを返す前に ( here ) 、結果のイメージに事前定義された OP のいずれかを適用することもできます。

さらに、サーバー プロセスでこれを実行しようとしていて、これらの操作を非同期で実行したい場合は、すべて同じ機能を提供するAsyncScalrクラスを調べることができますが、設定可能な数のスケーリング スレッドに対して操作をキューに入れ、飽和を回避します。ホストマシン。

imgscar は、過去数年間、本番環境で多数のサーバーおよびクライアント シナリオに展開されてきました。ライブラリを試す機会があれば、ぜひフィードバックをお寄せください。

于 2012-07-24T16:49:21.227 に答える