在JAVA中,當咱們調整圖片的大小或比例時,咱們能夠按照如下的步棸: html
- 經過調用的ImageIO類的read(File)方法 建立用於輸入圖片BufferedImage對象。
- 按所需輸出高度輸出的BufferedImage 對象。
- 從輸出圖片的BufferedImage對象獲取一個Graphics2D對象。
- 畫出輸入圖片的BufferedImage對象到輸出圖片的Graphics2D對象。
- 用ImageIO這個類,write(File)方法將圖片保存到硬盤。
這是一個圖片操做的工具類。他實現了兩個用於調整圖片大小的方法。 java
package net.codejava.graphic; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; /** * 操做圖片的代碼. */ public class ImageResizer { /** * Resizes an image to a absolute width and height (the image may not be * proportional) * @param inputImagePath Path of the original image * @param outputImagePath Path to save the resized image * @param scaledWidth absolute width in pixels * @param scaledHeight absolute height in pixels * @throws IOException */ public static void resize(String inputImagePath, String outputImagePath, int scaledWidth, int scaledHeight) throws IOException { // reads input image File inputFile = new File(inputImagePath); BufferedImage inputImage = ImageIO.read(inputFile); // creates output image BufferedImage outputImage = new BufferedImage(scaledWidth, scaledHeight, inputImage.getType()); // scales the input image to the output image Graphics2D g2d = outputImage.createGraphics(); g2d.drawImage(inputImage, 0, 0, scaledWidth, scaledHeight, null); g2d.dispose(); // extracts extension of output file String formatName = outputImagePath.substring(outputImagePath .lastIndexOf(".") + 1); // writes to output file ImageIO.write(outputImage, formatName, new File(outputImagePath)); } /** * Resizes an image by a percentage of original size (proportional). * @param inputImagePath Path of the original image * @param outputImagePath Path to save the resized image * @param percent a double number specifies percentage of the output image * over the input image. * @throws IOException */ public static void resize(String inputImagePath, String outputImagePath, double percent) throws IOException { File inputFile = new File(inputImagePath); BufferedImage inputImage = ImageIO.read(inputFile); int scaledWidth = (int) (inputImage.getWidth() * percent); int scaledHeight = (int) (inputImage.getHeight() * percent); resize(inputImagePath, outputImagePath, scaledWidth, scaledHeight); } /** * Test resizing images */ public static void main(String[] args) { String inputImagePath = "D:/Photo/Puppy.jpg"; String outputImagePath1 = "D:/Photo/Puppy_Fixed.jpg"; String outputImagePath2 = "D:/Photo/Puppy_Smaller.jpg"; String outputImagePath3 = "D:/Photo/Puppy_Bigger.jpg"; try { // resize to a fixed width (not proportional) int scaledWidth = 1024; int scaledHeight = 768; ImageResizer.resize(inputImagePath, outputImagePath1, scaledWidth, scaledHeight); // resize smaller by 50% double percent = 0.5; ImageResizer.resize(inputImagePath, outputImagePath2, percent); // resize bigger by 50% percent = 1.5; ImageResizer.resize(inputImagePath, outputImagePath3, percent); } catch (IOException ex) { System.out.println("Error resizing the image."); ex.printStackTrace(); } } }[warning] 注意 這樣操做圖片可能會影響圖片的質量[/warning]