圖片壓縮和縮略圖[JAVA]

          最近工作需要對服務器上面的文件進行壓縮,并且把原來一些縮略圖進行壓縮。貼出代碼片斷供大家交流。
          搜略圖實現規定大小畫布上縮小圖片,方便列表顯示。
          圖片壓縮提供了2種方法。1、可以自定義壓縮比。2、采用ImageIO進行默認壓縮(更安全一些,不會出現內存溢出)。

          ???? private ? void ?doThumbCompress(File?file) {
          ????????
          ????????BufferedImage?bis
          = null ;
          ????????
          ????????BufferedImage?bid
          = null ;
          ????????
          ????????
          try {

          ????????????
          int ?nw = ? 113 ;? // ?定義寬為113
          ???????????? int ?nh = ? 84 ;? // ??定義高為84
          ????????????
          ????????????bis?
          = ?ImageIO.read(file);
          ????????????
          int ?c_w = ?bis.getWidth();
          ????????????
          int ?c_h = ?bis.getHeight();

          ????????????
          if (c_w < 114 ? && ?file.length() < MIN_LENGTH) {????????
          ????????????????bis?
          = ? null ;
          ????????????????
          return ;
          ????????????}

          ????????????
          if (c_w > WIDTH) {
          ????????????????nw??
          = ?WIDTH;
          ????????????????nh?
          = ?c_h? * ?(WIDTH) / c_w;
          ????????????????c_h
          = nh;
          ????????????????c_w
          = nw;
          ????????????}
          ????
          ????????????
          ????????????
          if (c_h > HEIGHT) {
          ????????????????nh?
          = ?HEIGHT;
          ????????????????nw??
          = ?c_w? * ?(HEIGHT) / c_h;?????????????
          ????????????}

          ????????????
          ????????????
          ????????????
          ????????????bid
          = ? new ?BufferedImage(WIDTH,?HEIGHT,BufferedImage.TYPE_INT_RGB);????????????????????????
          ????????????Graphics?g?
          = ?bid.getGraphics();

          ????????????g.setColor(Color.white);

          ????????????g.fillRect(
          0 , 0 ,?WIDTH,?HEIGHT);
          ????????????
          ????????????g.drawImage(bis,(WIDTH
          - nw) / 2 , 0 ,nw,nh, null );
          ????????????
          ????????????
          ????????????
          ????????????
          long ?oldFileSize = file.length();
          ????????????
          ?????????????
          ????????????
          if (isOverlay) {
          ????????????????ImageIO.write(bid,?
          " jpeg " ,?file);
          ????????????}
          ? else {
          ????????????????ImageIO.write(ImageIO.read(file),?
          " jpeg " ,? new ?File(outPath
          ????????????????????????????????
          + File.separator + file.getName()));
          ????????????}

          ????????????
          long ?newFileSize = file.length();
          ????????????log(
          " ok: " + file + " \t " + oldFileSize + " \t " + newFileSize);
          ????????}
          ? catch ?(Exception?e) {
          ????????????log(file
          + " ?error: " + e.getMessage());
          ?????????????
          ????????}

          ????????
          ????????
          ????????bis
          = null ;
          ????????
          ????????bid
          = null ;
          ????}

          ????????

          ???? 壓縮圖片代碼:
          ????/**
          ?????*?可以自定義壓縮比例
          ?????*?
          @param?file
          ?????
          */

          ????
          private?void?doCompressQuality(File?file)??{
          ????????BufferedImage?src?
          =?null;
          ????????FileOutputStream?out?
          =??null;
          ????????JPEGImageEncoder?encoder?
          =?null;
          ????????JPEGEncodeParam??param???
          =?null;
          ????????
          ????????
          try{
          ????????????src
          =?ImageIO.read(file);//or?png.
          ????????????if(isOverlay){
          ????????????????out
          =?new?FileOutputStream(file);
          ????????????}
          else{
          ????????????????out
          =?new?FileOutputStream(outPath+File.separator+file.getName());
          ????????????}

          ????????????encoder
          =?JPEGCodec.createJPEGEncoder(out);
          ????????????param
          =?encoder.getDefaultJPEGEncodeParam(src);????????????
          ????????????param.setQuality(imageQuality,?
          false);
          ????????????encoder.setJPEGEncodeParam(param);????????????
          ????????????encoder.encode(src);
          //近JPEG編碼
          ????????????out.close();
          ????????????
          //ImageIO.write(src,?"jpeg",?new?File(outPath+File.separator+file.getName()));????????????
          ????????????log("over:"+file.getPath());
          ????????}
          ?catch?(IOException?e){
          ????????????log(
          "compress?error:"+file.getPath()+";error:"+e.getMessage());
          ????????}

          ????????out?
          =?null;
          ????????encoder?
          =?null;
          ????????param???
          =?null;
          ????????src?????
          =?null;
          ????}


          ????
          /**
          ?????*?壓縮圖片,默認壓縮比例75%
          ?????*?
          @param?file
          ?????
          */

          ????
          private?void?doCompress(File?file){
          ????????File?descFile?
          =?null;
          ????????
          boolean?writeOk=false;
          ????????
          long?fileSize=file.length();

          ????????
          try{
          ????????????
          ????????????
          if(isOverlay){????????????????
          ????????????????descFile?
          =?file;
          ????????????????writeOk?
          =?ImageIO.write(ImageIO.read(file),?"jpeg",?descFile);
          ????????????}
          else{
          ????????????????descFile?
          =?new?File(outPath+File.separator+file.getName());
          ????????????????writeOk?
          =?ImageIO.write(ImageIO.read(file),?"jpeg",?descFile);
          ????????????}
          ????????
          ????????????
          ????????????
          if(writeOk){
          ????????????????log(
          "ok:"+file.getPath()+"\t"+fileSize+"\t"+descFile.length());
          ????????????}
          else{
          ????????????????log(
          "fail:"+file.getPath()+"\t"+fileSize+"\t"+descFile.length());
          ????????????}
          ????????????
          ????????????
          ????????}
          ?catch?(Exception?e){
          ????????????log(
          "compress?error:"+file.getPath()+";descFile="+descFile+";error:"+e.getMessage());
          ????????}

          ????????descFile
          =null;
          ????}

          posted on 2010-01-25 11:30 飛熊 閱讀(601) 評論(0)  編輯  收藏 所屬分類: java

          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 灌云县| 将乐县| 甘洛县| 奉节县| 兴业县| 浮梁县| 沐川县| 靖安县| 务川| 云南省| 额敏县| 林甸县| 华蓥市| 清徐县| 阿拉善右旗| 寻甸| 延边| 赤水市| 沐川县| 六安市| 桓台县| 偃师市| 南和县| 武胜县| 龙岩市| 新源县| 安龙县| 蒲江县| 黄石市| 吐鲁番市| 青神县| 长治市| 错那县| 乌兰察布市| 张家港市| 若尔盖县| 孙吴县| 商河县| 阳谷县| 大悟县| 原阳县|