Java 中的 ImageIO
ImageIO
是 Java 中的一個類,是 javax.imageio
包的一部分,其中包含執行讀取或寫入影象等操作的各種方法。
我們將在以下部分學習使用 ImageIO
類來讀取和寫入影象。
在 Java 中使用 ImageIO
來讀取影象
我們使用 ImageIO
類的 read()
函式來讀取影象。在程式中,我們建立了一個 File
的物件,並將檔案的路徑作為引數傳遞給建構函式。
我們使用 ImageIO
呼叫 read()
方法並將其傳遞給返回 BufferedImage
物件的 file
物件。我們已經成功地讀取了影象,我們使用 JFrame
和 ImageIcon
在視窗中顯示影象。
我們建立一個函式 setImageToFrame()
並將 bufferedImage
作為引數傳送。在 setImageToFrame()
函式中,我們建立一個 ImageIcon
物件並使用 setIcon()
函式將其設定為 JLabel
的圖示。
一旦我們將標籤新增到框架並執行程式,我們就可以在輸出中看到影象。
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class JavaExample {
public static void main(String[] args) {
try {
File file = new File("C:\\Users\\Rupam Saini\\IdeaProjects\\Java Examples\\src\\main\\java\\sample_image.jpg");
BufferedImage bufferedImage = ImageIO.read(file);
setImageToFrame(bufferedImage);
} catch (IOException e) {
e.printStackTrace();
}
}
static void setImageToFrame(BufferedImage image) {
ImageIcon imageIcon = new ImageIcon(image);
JFrame jFrame = new JFrame();
jFrame.setLayout(new FlowLayout());
jFrame.setSize(700, 500);
JLabel jLabel = new JLabel();
jLabel.setIcon(imageIcon);
jFrame.add(jLabel);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
輸出:
我們還可以使用 read()
函式從連結中讀取影象。
我們需要建立一個 URL
物件並使用指向影象的連結作為引數建構函式。我們將 URL
物件傳遞給 read()
方法。
URL url = new URL("https://images.unsplash.com/photo-1516475429286-465d815a0df7?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&dl=will-klinzman-oaCD9WYdNlU-unsplash.jpg&w=640");
BufferedImage bufferedImage = ImageIO.read(url);
輸出:
在 Java 中使用 ImageIO
編寫影象並更改格式
我們可以使用 ImageIO
類執行的另一個有用操作是寫入影象並更改其格式。我們首先像在前面的示例中那樣讀取影象,然後呼叫 ImageIO
類的 write()
函式,該函式接受三個引數。
write()
方法的第一個引數是 BufferedImage
物件。第二個引數是我們要寫入新影象的格式或副檔名。最後一個引數是具有新副檔名的新影象路徑的 File
物件。
在我們的示例中,我們將影象的格式從 JPG
更改為 PNG
。我們有兩個影象:原始影象和我們使用 write()
方法建立的另一個影象。
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class JavaExample {
public static void main(String[] args) {
try {
File file = new File("C:\\Users\\Rupam Saini\\IdeaProjects\\Java Examples\\src\\main\\java\\sample_image.jpg");
BufferedImage bufferedImage = ImageIO.read(file);
ImageIO.write(bufferedImage, "png", new File("C:\\Users\\Rupam Saini\\IdeaProjects\\Java Examples\\src\\main\\java\\sample_image.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
輸出:
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