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 回應:
張貼留言