在 Java 中調整影象大小
-
在 Java 中使用
BufferedImage.getScaledInstance()
調整和顯示影象的大小 -
在 Java 中使用
Graphics2D
和ImageIO
調整影象大小並儲存到本地目錄
Java 可以執行多種不同型別的操作,例如讀取、寫入或刪除檔案。在以下示例中,我們將演示如何使用三種技術在 Java 中調整影象大小。
在 Java 中使用 BufferedImage.getScaledInstance()
調整和顯示影象的大小
在第一個示例中,我們調整影象大小並將其顯示在框架內,而不將其儲存在任何地方。在這裡,我們建立了 BufferedImage
類的物件 bufferedImage
。BufferedImage
類擴充套件了 Image
類,將圖形影象表示為矩形畫素陣列。要讀取影象,我們使用 ImageIO.read()
函式。在這裡,ImageIO
是一個包含靜態方法(如 read
和 write
)的類,用於執行輸入和輸出操作。
我們使用 new File()
方法獲取影象,該方法呼叫 File
類建構函式並將影象位置作為引數傳遞給其中。一旦我們獲得了 bufferedImage
物件,我們就用它來呼叫 getScaledInstance()
方法來建立影象的縮放版本。
getScaledInstance
函式接受三個引數:前兩個是我們想要給影象的寬度和高度(以畫素為單位),最後一個引數是用於縮放的演算法。在這裡,我們使用 Image.SCALE_DEFAULT
函式,它告訴類使用預設取樣演算法。
完成後,我們建立一個視窗以使用 JFrame
物件顯示影象。我們將 frame
物件的佈局設定為 FlowLayout
,它將元件排列成一行。然後,我們設定視窗的大小;請注意,此大小應大於影象的高度和寬度以完整顯示圖片。
最後,為了顯示影象,我們建立了一個 JLabel
物件並呼叫了將影象設定為圖示的 section
類。最後,我們將 jLabel
物件新增到 frame
物件並將可見性設定為 true。
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class ResizeImageExample {
public static void main(String[] args) throws IOException {
new ResizeImageExample();
}
public ResizeImageExample() throws IOException {
BufferedImage bufferedImage = ImageIO.read(new File("C:\\Users\\User1\\Pictures\\java.png"));
Image image = bufferedImage.getScaledInstance(600, 400, Image.SCALE_DEFAULT);
ImageIcon icon = new ImageIcon(image);
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.setSize(800, 600);
JLabel jLabel = new JLabel();
jLabel.setIcon(icon);
frame.add(jLabel);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
輸出:
在 Java 中使用 Graphics2D
和 ImageIO
調整影象大小並儲存到本地目錄
在第二種方法中,我們使用 Graphics2D
類來建立圖形。第一步是使用 ImageIo.read()
方法獲取影象檔案,該方法將 File
物件作為包含影象路徑的引數。ImageIo.read()
返回 BufferedImage
物件,bufferedImageInput
。我們建立了另一個在寫入影象時使用的 BufferedImage
物件。它接受三個引數:高度、寬度和影象型別。
現在我們使用返回 Graphics2D
物件 g2d
的 bufferdImageOutput
物件呼叫 createGraphics()
方法。然後,我們使用帶有六個引數的 drawImage()
方法建立影象。第一個是 BufferedImage
物件,第二個和第三個是 x 和 y 座標,如果兩個值都為零,它們會根據大小放大。第四個和第五個引數代表我們想要給影象的新高度和寬度,最後一個引數是 ImageObserver
,在我們的例子中是 null
。
在繼續之前,我們使用 g2d.dispose()
函式處理 g2d
使用的所有上下文和資源。要將調整後的影象儲存在本地目錄中,我們使用 ImageIo.write()
函式,該函式採用 bufferedImageOutput
物件、要賦予新影象檔案的名稱以及帶有檔案路徑的 File
建構函式。
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ResizeImageExample {
public static void main(String[] args) throws IOException {
resizeFile("C:\\Users\\Rupam Saini\\Pictures\\java.png",
"C:\\Users\\Rupam Saini\\Pictures\\java-resized.png", 500, 500);
}
public static void resizeFile(String imagePathToRead, String imagePathToWrite, int resizeWidth,
int resizeHeight) throws IOException {
File fileToRead = new File(imagePathToRead);
BufferedImage bufferedImageInput = ImageIO.read(fileToRead);
BufferedImage bufferedImageOutput =
new BufferedImage(resizeWidth, resizeHeight, bufferedImageInput.getType());
Graphics2D g2d = bufferedImageOutput.createGraphics();
g2d.drawImage(bufferedImageInput, 0, 0, resizeWidth, resizeHeight, null);
g2d.dispose();
String formatName = imagePathToWrite.substring(imagePathToWrite.lastIndexOf(".") + 1);
ImageIO.write(bufferedImageOutput, formatName, new File(imagePathToWrite));
}
}
調整大小前的影象:
調整大小後的影象:
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn