package test_image;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class TestImageResize {
private static int targetWidth = 120;
private static int targetHeight = 80;
private static double targetRate = (double) targetWidth / targetHeight;
public static void main(String[] args) throws Exception {
System.out.printf("Target w:%s, h:%s, r:%s\n",
targetWidth, targetHeight, targetRate);
BufferedImage image = ImageIO.read(new File("input.jpg"));
int type = image.getType();
if(type == 0) { type = BufferedImage.TYPE_INT_ARGB; }
int width = image.getWidth();
int height = image.getHeight();
double rate = (double) width / height;
System.out.printf("Source w:%s, h:%s, r:%s\n", width, height, rate);
/* 等比例縮小至指定大小內 */
int rWidth = targetWidth;
int rHeight = targetHeight;
if(width < targetWidth && height < targetHeight) {
rWidth = width;
rHeight = height;
} else if(rate > targetRate) {
rHeight = (int) (targetWidth / rate);
} else {
rWidth = (int) (targetHeight * rate);
}
System.out.printf("Resize w:%s, h:%s\n", rWidth, rHeight);
BufferedImage resize1 = new BufferedImage(rWidth, rHeight, type);
Graphics g1 = resize1.getGraphics();
g1.drawImage(image, 0, 0, rWidth, rHeight, null);
g1.dispose();
ImageIO.write(resize1, "jpg", new File("output_1.jpg"));
/* 等比例縮小填滿指定大小 */
BufferedImage resize2 = new BufferedImage(targetWidth,targetHeight,type);
Graphics g2 = resize2.getGraphics();
int startX = 0;
int startY = 0;
int size = 0;
if(rate > targetRate) {
startX = (int) (width - height * targetRate) / 2;
size = height;
} else {
startY = (int) (height - width / targetRate) / 2;
size = width;
}
System.out.printf("x:%s, y:%s, size:%s\n", startX, startY, size);
g2.drawImage(
image,
0, 0, targetWidth, targetHeight,
startX, startY, (size + startX), (size + startY),
null
);
g2.dispose();
ImageIO.write(resize2, "jpg", new File("output_2.jpg"));
}
}
參考文件:
Graphics (Java 2 Platform SE 6)
0 回應:
張貼留言