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

JAVA生成JPG縮略圖

2013-11-23 17:53:53  來源: Javascript 

  在任何一個綜合性網站我們往往需要上傳一些圖片資料但隨著高分辨率DC的普及上傳的圖片容量會很大比如萬象素DC出來的文件基本不下K為了管理方便大家可能不願意每次都用ACDsee修改它而直接上傳到服務器但是這種做法在客戶端看來就沒有那麼輕松了對於撥號上網的用戶簡直是一場惡夢雖然你可以在圖片區域設置wide和high!
  
  問題的解決之道來了!我們可以在類中處理一張大圖並縮小它
  前提是需要JDK這樣才能進行處理按以下方法做
  
  import javaioFile;
  import javaioFileOutputStream;
  import javaawtGraphics;
  import javaawtImage;
  import javaawtimageBufferedImage;
  
  import decjpegJPEGCodec;
  import decjpegJPEGImageEncoder;
  
  public class JpgTest {
  
  public void JpgTset() throws Exception{
  File _file = new File(/Orderjpg);            //讀入文件
  Image src = javaximageioImageIOread(_file);           //構造Image對象
  int wideth=srcgetWidth(null);                   //得到源圖寬
  int height=srcgetHeight(null);                  //得到源圖長
  BufferedImage tag = new BufferedImage(wideth/height/BufferedImageTYPE_INT_RGB);
  taggetGraphics()drawImage(srcwideth/height/null);    //繪制縮小後的圖
  FileOutputStream out=new FileOutputStream(newfilejpg);     //輸出到文件流
  JPEGImageEncoder encoder = JPEGCodeccreateJPEGEncoder(out);
  encoderencode(tag);                        //近JPEG編碼
  //Systemoutprint(width+*+height);
  outclose();
  }
  }
  
  過程很簡單從本地磁盤讀取文件Orderjpg(*)變成Image對象src接著構造目標文件tag設置tag的長寬為源圖的一半對tag進行編碼輸出到文件流out最後關閉文件流
  
  還有一些問題需要說明
  第一目前只能支持JPG(JPEG)GIFPNG三種格式
  第二對於源圖的容量有限制最好不要超過M否則會拋內存不足的錯誤不過我試驗過M的源圖可以成功但是也很容易拋內存不足
  
  引用一位前輩的話圖象運算本身是密集型運算需要大量的內存存放象素值我用VC試了一下M的圖象也有問題而且越是壓縮比大的圖片在內存中還原成BITMAP時需要的內存越大解決的方法可以重寫編碼類先開一定的內存然後一段一段編碼寫到臨時文件中輸出的時候再一段一段讀出來或利用nio的內存映象來操作JavaMail由於采用了Builder模式先生成一個郵件的每一個部分然後合並成一個完整的郵件對象這樣每個構件都要先生成到內存中你如果發送一個上百兆的附件那麼在構造Part時肯定內存溢出所以我就改寫了BodyPart的構造讓他和一個臨時文件關聯然後用臨時文件保存Part而不是構造在內存中這樣任義大小的附件(硬盤能放得下為限)都可以發送了
  
  最後如果大家對圖像處理有更高的要求不妨關注一下開源項目比如JMagick可以使用JMagick來實現圖片的復制信息獲取斜角特效組合改變大小加邊框旋轉切片改變格式去色等等功能
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25305.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.