kalman03

          每天早上看一遍《福布斯》富翁排行榜,如果上面沒有我的名字,我就去學習......
          隨筆 - 22, 文章 - 0, 評論 - 86, 引用 - 0
          數據加載中……

          (轉)圖片等比壓縮,確保不失真


          import java.awt.Image;
          import java.awt.image.BufferedImage;
          import java.io.File;
          import java.io.FileOutputStream;

          import javax.imageio.ImageIO;

          import com.sun.image.codec.jpeg.JPEGCodec;
          import com.sun.image.codec.jpeg.JPEGImageEncoder;

          public class Snippet {
              
          /**
               * 創建圖片縮略圖(等比縮放)
               * 
               * 
          @param src
               *            源圖片文件完整路徑
               * 
          @param dist
               *            目標圖片文件完整路徑
               * 
          @param width
               *            縮放的寬度
               * 
          @param height
               *            縮放的高度
               
          */
              
          public static void createThumbnail(String src, String dist, float width,
                      
          float height) {
                  
          try {
                      File srcfile 
          = new File(src);
                      
          if (!srcfile.exists()) {
                          System.out.println(
          "文件不存在");
                          
          return;
                      }
                      BufferedImage image 
          = ImageIO.read(srcfile);

                      
          // 獲得縮放的比例
                      double ratio = 1.0;
                      
          // 判斷如果高、寬都不大于設定值,則不處理
                      if (image.getHeight() > height || image.getWidth() > width) {
                          
          if (image.getHeight() > image.getWidth()) {
                              ratio 
          = height / image.getHeight();
                          } 
          else {
                              ratio 
          = width / image.getWidth();
                          }
                      }
                      
          // 計算新的圖面寬度和高度
                      int newWidth = (int) (image.getWidth() * ratio);
                      
          int newHeight = (int) (image.getHeight() * ratio);

                      BufferedImage bfImage 
          = new BufferedImage(newWidth, newHeight,
                              BufferedImage.TYPE_INT_RGB);
                      bfImage.getGraphics().drawImage(
                              image.getScaledInstance(newWidth, newHeight,
                                      Image.SCALE_SMOOTH), 
          00null);

                      FileOutputStream os 
          = new FileOutputStream(dist);
                      JPEGImageEncoder encoder 
          = JPEGCodec.createJPEGEncoder(os);
                      encoder.encode(bfImage);
                      os.close();
                      System.out.println(
          "創建縮略圖成功");
                  } 
          catch (Exception e) {
                      System.out.println(
          "創建縮略圖發生異常" + e.getMessage());
                  }
              }
              
              
          public static void main(String[] args) {
                  createThumbnail(
          "E:\\test_1920x1200.jpg""D:\\a.png"100100);
                  createThumbnail(
          "E:\\test_1920x1200.jpg""D:\\b.png"20002000);
                  createThumbnail(
          "E:\\test_1920x1200.jpg""D:\\c.jpg"800600);
              }

          }

          posted on 2012-01-11 15:43 kalman03 閱讀(7142) 評論(1)  編輯  收藏

          評論

          # re: (轉)圖片等比壓縮,確保不失真  回復  更多評論   

          很失真
          2015-10-22 11:07 | 小大人

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 龙里县| 八宿县| 客服| 竹溪县| 鲁甸县| 连城县| 获嘉县| 宣威市| 凤山市| 元阳县| 斗六市| 日土县| 台江县| 防城港市| 纳雍县| 沛县| 武乡县| 宁陕县| 安远县| 奇台县| 平顶山市| 泰来县| 澎湖县| 乌拉特后旗| 蓬安县| 罗城| 赫章县| 锡林浩特市| 榆中县| 怀安县| 罗源县| 伊通| 体育| 杭锦旗| 松原市| 竹北市| 洛川县| 尉氏县| 赣州市| 民和| 贺兰县|