Java 圖片處理

Javax ImageIO 圖片縮放處理

java image

這次介紹的圖片處理,只會介紹到簡單的圖片放大、縮小而已! 用到的是 Javax ImageIO API。 通常只是要簡單的讀取圖片,改個畫質、改個大小、裁切的話,不需要用到太強大的功能,用 JDK 自己的 ImageIO 就夠了!沒有必要再去另外下載第三方 Jar 包。


查看支援格式

先簡單看一下我們 JDK 內的 ImageIO 支援哪些圖片格式吧!

String[] readFormats = ImageIO.getReaderFormatNames(); // 可讀入的格式
String[] writerFormatNames = ImageIO.getWriterFormatNames(); // 可輸出的格式
System.out.println("可讀入的圖片格式:" + Arrays.asList(readFormats));
System.out.println("可輸出的圖片格式:" + Arrays.asList(writerFormatNames));

讀入圖片

讀入圖片我們用 ImageIO.read() 方法取得 BufferedImage 物件 得到 BufferedImage 物件後,它就是我們接下來要操作的物件了。

File imgFile = new File("/your/path/img.png");
BufferedImage bufferedImage = ImageIO.read(imgFile); // 讀入檔案轉為 BufferedImage 物件
BufferImage 物件操作
// 讀入圖片,建立圖片 Buffered 物件
File imgFile = new File("/your/path/img.png");
BufferedImage bufferedImage = ImageIO.read(imgFile);

int exportWidth = bufferedImage.getWidth() / 2; // 要輸出的寬度
int exportHeight = bufferedImage.getHeight() / 2; // 要輸出的高度
// 讀入一個空白的 BufferedImage 物件,只定義 寬度、高度、輸出類型
BufferedImage emptyImage = new BufferedImage(exportWidth, exportHeight, bufferedImage.getType());

// 用剛才建立的空白 BufferedImage 物件來建立畫布
Graphics2D g2d = emptyImage.createGraphics();
g2d.drawImage(
  bufferedImage, // 把我們讀入的圖片畫上去
  0, // x軸起始點
  0, // y軸起始點
  exportWidth, // 要畫上去的寬度
  exportHeight, // 要畫上去的長度
  null
);
g2d.dispose(); // 其實不用一定要用到 dispose() 方法,用了 dispose() 這個 g2d 就不能再被寫入內容了

這個稍稍有點不好懂,來個圖解吧! 先建立一個空的 BufferedImage (emptyImage) 物件, drawImage() 定義的參數是定義了這個。

Graphics2D

輸出圖片

輸出圖片就是上一篇有教到的了!再麻煩幫我看一下了!!

// 建立一個 FileOutputStream 並且告訴他我們的目標輸出的位置
FileOutputStream os = new FileOutputStream("/your/path/output.png");
ImageIO.write(emptyImage, "png", os);