誰もアイデアを持っていないので、私のソリューションを公開します... Scalr を使い続けることにしました (Thumbnailator の最後のバージョンはチェックしませんでしたが、以前のものは大きな画像で失敗しました)。最初にresize
メソッドを呼び出し、新しいサムネイルのサイズが指定されたサイズよりも大きい場合はcrop
、サムネイルを中央でトリミングするメソッドを呼び出します。コードは次のとおりです。
BufferedImage thumbnail = Scalr.resize(sourceFile, Scalr.Method.ULTRA_QUALITY, Scalr.Mode.AUTOMATIC, destinationSize.width, destinationSize.height);
if (thumbnail.getWidth() > destinationSize.width)
thumbnail = Scalr.crop(thumbnail, (thumbnail.getWidth() - destinationSize.width) / 2, 0, destinationSize.width, destinationSize.height);
else if (thumbnail.getHeight() > destinationSize.height)
thumbnail = Scalr.crop(thumbnail, 0, (thumbnail.getHeight() - destinationSize.height) / 2, destinationSize.width, destinationSize.height);
理想的ではありませんが、少なくともサムネイルの生成後に「ワイド」画像を処理します