熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

java圖片裁剪原理

2013-11-23 19:23:36  來源: Java核心技術 

  總體思想

  前台網頁用js得到裁剪圖片的id及xy寬度和高度

  服務端根據id取出要裁剪的圖片

  根據這些參數來生成裁剪的圖像 後台代碼如下

  java 代碼

  package comwodexiangce;

  import javaawtRectangle;

  import javaawtimageBufferedImage;

  import javaioFile;

  import javaioFileInputStream;

  import javaioIOException;

  import javautilIterator;

  import javaximageioImageIO;

  import javaximageioImageReadParam;

  import javaximageioImageReader;

  import javaximageiostreamImageInputStream;

  /**

  *

  *

  *

  */

  public class OperateImage {

  // ===源圖片路徑名稱如c:\jpg

  private String srcpath ;

  // ===剪切圖片存放路徑名稱c:\jpg

  private String subpath ;

  // ===剪切點x坐標

  private int x ;

  private int y ;

  // ===剪切點寬度

  private int width ;

  private int height ;

  public OperateImage() {

  }

  public OperateImage( int x int y int width int height) {

  this x = x ;

  this y = y ;

  this width = width ;

  this height = height ;

  }

  /**

  * 對圖片裁剪並把裁剪完蛋新圖片保存

  */

  public void cut() throws IOException {

  FileInputStream is = null ;

  ImageInputStream iis = null ;

  try {

  // 讀取圖片文件

  is = new FileInputStream(srcpath)

  /*

  * 返回包含所有當前已注冊 ImageReader 的 Iterator這些 ImageReader

  * 聲稱能夠解碼指定格式 參數formatName 包含非正式格式名稱

  *(例如 jpegtiff)等

  */

  Iterator < ImageReader > it = ImageIOgetImageReadersByFormatName( jpg

  ImageReader reader = itnext()

  // 獲取圖片流

  iis = ImageIOcreateImageInputStream(is)

  /*

  * <p>iis:讀取源true:只向前搜索 </p>將它標記為 只向前搜索

  * 此設置意味著包含在輸入源中的圖像將只按順序讀取可能允許 reader

  * 避免緩存包含與以前已經讀取的圖像關聯的數據的那些輸入部分

  */

  readersetInput(iis true ) ;

  /*

  * <p>描述如何對流進行解碼的類<p>用於指定如何在輸入時從 Java Image I/O

  * 框架的上下文中的流轉換一幅圖像或一組圖像用於特定圖像格式的插件

  * 將從其 ImageReader 實現的 getDefaultReadParam 方法中返回

  * ImageReadParam 的實例

  */

  ImageReadParam param = readergetDefaultReadParam()

  /*

  * 圖片裁剪區域Rectangle 指定了坐標空間中的一個區域通過 Rectangle 對象

  * 的左上頂點的坐標(xy)寬度和高度可以定義這個區域

  */

  Rectangle rect = new Rectangle(x y width height)

  // 提供一個 BufferedImage將其用作解碼像素數據的目標

  paramsetSourceRegion(rect)

  /*

  * 使用所提供的 ImageReadParam 讀取通過索引 imageIndex 指定的對象並將

  * 它作為一個完整的 BufferedImage 返回

  */

  BufferedImage bi = readerread( param)

  // 保存新圖片

  ImageIOwrite(bi jpg new File(subpath))

  } finally {

  if (is != null )

  isclose() ;

  if (iis != null )

  iisclose()

  }

  }

  public int getHeight() {

  return height;

  }

  public void setHeight( int height) {

  this height = height;

  }

  public String getSrcpath() {

  return srcpath;

  }

  public void setSrcpath(String srcpath) {

  this srcpath = srcpath;

  }

  public String getSubpath() {

  return subpath;

  }

  public void setSubpath(String subpath) {

  this subpath = subpath;

  }

  public int getWidth() {

  return width;

  }

  public void setWidth( int width) {

  this width = width;

  }

  public int getX() {

  return x;

  }

  public void setX( int x) {

  this x = x;

  }

  public int getY() {

  return y;

  }

  public void setY( int y) {

  this y = y;

  }

  public static void main(String[] args) throws Exception {

  String name = d:\jpg ;

  OperateImage o = new OperateImage(

  osetSrcpath(name)

  osetSubpath( D:\jpg

  ocut() ;

  }

  }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26771.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.