私は、Java 用のサムネイル生成ライブラリであるThumbnailatorを維持しています。これは、使いやすい流暢な APIを介して、画像のサイズを変更し、いくつかの簡単な画像操作を行う手段を提供します。
Thumbnailator が提供する機能の 1 つは、Canvas
結果のサムネイルのトリミングとパディング (またはレターボックス化) を実行できるフィルターです。
画像のパディング
たとえば、Canvas
フィルターを使用して画像をパディングするには、次のようにします。
Thumbnails.of("path/to/image.jpg")
.size(150, 150)
.addFilter(new Canvas(150, 150, Positions.CENTER, Color.blue))
.toFile("path/to/padded-image.jpg");
上記は次のようになります。
size
元の画像を取得し、メソッドを使用して 150 x 150 以内に収まるように縮小します。
- 次に、
addFilter
メソッドで指定された追加のフィルタリング手順により、( を使用して) 青のパディングが追加されColor.blue
、サイズが 150 x 150 の最終画像が生成されます。
- 結果のサムネイルを に保存します
path/to/padded-image.jpg
。
上記のコードをポートレート写真で使用すると、次のようになります。

(出典: coobird.net )
画像のトリミング
フィルターを使用した画像のトリミングはCanvas
、次の方法で実現できます。
Thumbnails.of("path/to/image.jpg")
.size(150, 150)
.addFilter(new Canvas(100, 100, Positions.TOP_RIGHT, true))
.toFile("path/to/cropped-image.jpg");
上記のコードは次のようになります。
size
元の画像を取得し、メソッドを使用して 150 x 150 以内に収まるように縮小します。
- 次に、追加のフィルタリング手順により、サイズ変更された画像の右上隅から 100 x 100 の領域が切り取られます。(コンストラクター呼び出し
true
に存在する引数はCanvas
、指定されたサイズよりも大きい場合に画像をトリミングする必要があることを示します。)
- 結果のサムネイルを に保存します
path/to/cropped-image.jpg
。
上記のコードを実行する例は次のとおりです。

(出典: coobird.net )
現在、トリミングを Thumbnailator API のより不可欠な部分にする機能のリクエストがあるため、将来的には、ほとんどの状況でメソッドcrop
を呼び出す必要性を減らすメソッドを追加する予定です。addFilter