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