이미지 파일의 썸네일을 만들 때 강제로 썸네일의 지정 크기에 맞게 크기를 고정하거나, 혹은 썸네일 지정 크기를 넘지 않으면서 도 원본 이미지의 비율을 유지하도록 하는 방법 외에, 썸네일 지정 크기로 만들고, 원본 이미지를 썸네일의 비율에 맞는 영역만 crop 하는 방식을 취할 수 있다.
C#으로 만들어진 썸네일의 가로/세로 비율에 맞춰 원본 이미지 crop 하는 영역 구하는 방법을 http://www.davidmoore.info/2009/02/07/creating-thumbnail-images-with-automatic-cropping-and-maintaining-aspect-ratio/ 에서 볼 수 있다.
이의 Java Code 는 다음과 같다.
public Dimension calculateCropSize(Dimension originalSize, Dimension thumbnailSize) { double originalAspectRatio = originalSize.getWidth() / originalSize.getHeight(); double thumbnailAspectRatio = thumbnailSize.getWidth() / thumbnailSize.getHeight(); if (originalAspectRatio == thumbnailAspectRatio) { return new Dimension(originalSize); } int targetWidth = originalSize.width; int targetHeight = originalSize.height; if (thumbnailAspectRatio > originalAspectRatio) { targetHeight = (int) (originalSize.getWidth() * (thumbnailSize .getHeight() / thumbnailSize.getWidth())); } else { targetWidth = (int) (originalSize.getHeight() * thumbnailAspectRatio); } return new Dimension(targetWidth, targetHeight); }