給出一張原圖片,而後根據須要在這張圖片上的位置,須要截取的長度和寬度,來截取圖片。java
- import java.awt.Rectangle;
- import java.awt.p_w_picpath.BufferedImage;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.util.Iterator;
- import javax.p_w_picpathio.ImageIO;
- import javax.p_w_picpathio.ImageReadParam;
- import javax.p_w_picpathio.ImageReader;
- import javax.p_w_picpathio.stream.ImageInputStream;
- 以上是須要引入的類
- 下面是截取圖片方法
- String srcpath;//文件路徑
- int top;
- int left;
- int width, height;
- public void cut() throws IOException,Exception{
- FileInputStream is = null ;
- ImageInputStream iis =null ;
- try{
- //讀取圖片文件
- is = new FileInputStream(srcpath);
- /**//*
- * 返回包含全部當前已註冊 ImageReader 的 Iterator,這些 ImageReader
- * 聲稱可以解碼指定格式。 參數:formatName - 包含非正式格式名稱 .
- *(例如 "jpeg" 或 "tiff")等 。
- */
- Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(picformat);
- ImageReader reader = it.next();
- //獲取圖片流
- iis = ImageIO.createImageInputStream(is);
- /**//*
- * <p>iis:讀取源.true:只向前搜索 </p>.將它標記爲 ‘只向前搜索’。
- * 此設置意味着包含在輸入源中的圖像將只按順序讀取,可能容許 reader
- * 避免緩存包含與之前已經讀取的圖像關聯的數據的那些輸入部分。
- */
- reader.setInput(iis,true) ;
- /**//*
- * <p>描述如何對流進行解碼的類<p>.用於指定如何在輸入時從 Java Image I/O
- * 框架的上下文中的流轉換一幅圖像或一組圖像。用於特定圖像格式的插件
- * 將從其 ImageReader 實現的 getDefaultReadParam 方法中返回
- * ImageReadParam 的實例。
- */
- ImageReadParam param = reader.getDefaultReadParam();
- /**//*
- * 圖片裁剪區域。Rectangle 指定了座標空間中的一個區域,經過 Rectangle 對象
- * 的左上頂點的座標(x,y)、寬度和高度能夠定義這個區域。
- */
- Rectangle rect = new Rectangle(top, left, width, height);
- //提供一個 BufferedImage,將其用做解碼像素數據的目標。
- param.setSourceRegion(rect);
- /**//*
- * 使用所提供的 ImageReadParam 讀取經過索引 p_w_picpathIndex 指定的對象,並將
- * 它做爲一個完整的 BufferedImage 返回。
- */
- BufferedImage bi = reader.read(0,param);
- //保存新圖片
- ImageIO.write(bi, "jpg", new File(subpath));
- }
- finally{
- if(is!=null)
- is.close() ;
- if(iis!=null)
- iis.close();
- }
- }