paulwong

          重定義圖片尺寸

          http://www.thebuzzmedia.com/downloads/software/imgscalr/javadoc/org/imgscalr/Scalr.html
          http://stackoverflow.com/questions/11618205/resize-image-to-fixed-size-add-border-if-needed
          http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/
          http://stackoverflow.com/questions/5837781/resize-image-to-fixed-size

          http://blog.codejava.net/nam/reduce-image-quality-without-resizing/


          package com.paul.image;

          import java.awt.image.BufferedImage;
          import java.io.ByteArrayInputStream;
          import java.io.ByteArrayOutputStream;
          import java.io.File;
          import java.io.IOException;
          import java.util.Iterator;

          import javax.imageio.IIOImage;
          import javax.imageio.ImageIO;
          import javax.imageio.ImageWriteParam;
          import javax.imageio.ImageWriter;
          import javax.imageio.stream.FileImageOutputStream;

          public class ImageFileSizeReducer {
              
              private static String srcPic = "E:/PAUL/WORK/WORDSPACES/WORKSPACE1/Test1/data/pic1.jpg";
              
              private static String destPic = "E:/PAUL/WORK/WORDSPACES/WORKSPACE1/Test1/data/pic3.jpg";

              public static void reduceImageQuality(int sizeThreshold, byte[] srcImg,
                      String destPic) throws Exception {

                  float quality = 1.0f;

                  Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg");

                  ImageWriter writer = (ImageWriter) iter.next();

                  ImageWriteParam iwp = writer.getDefaultWriteParam();

                  iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);

                  ByteArrayInputStream inputStream = new ByteArrayInputStream(srcImg);

                  long fileSize = srcImg.length;

                  BufferedImage originalImage = ImageIO.read(inputStream);
                  IIOImage image = new IIOImage(originalImage, nullnull);

                  float percent = 0.8f; // 10% of 1

                  while (fileSize > sizeThreshold) {
                      if (percent >= quality) {
                          percent = percent * 0.1f;
                      }

                      quality -= percent;
                      iwp.setCompressionQuality(quality);

          //            ByteArrayOutputStream out = new ByteArrayOutputStream();
          //            ImageOutputStream imageos = ImageIO.createImageOutputStream(out);
                      
                      File file = new File(destPic);  
                      FileImageOutputStream output = new FileImageOutputStream(file);  
                      
                      writer.setOutput(output);
                      writer.write(null, image, iwp);
                      output.close(); // or imageos.flush();

          //            destImg = output.length();

                      long newFileSize = output.length();
                      if (newFileSize == fileSize) {
          //                createNewPic(quality);
                          
          // cannot reduce more, return
                          break;
                      } else {
                          fileSize = newFileSize;
                      }
                      System.out.println("quality = " + quality + ", new file size = "
                              + fileSize);

                  }
                  writer.dispose();


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

                      BufferedImage originalImage = ImageIO.read(new File(srcPic));

                      ByteArrayOutputStream baos = new ByteArrayOutputStream();
                      ImageIO.write(originalImage, "jpg", baos);
                      baos.flush();
                      byte[] imageInByte = baos.toByteArray();
                      baos.close();

                      ImageFileSizeReducer.reduceImageQuality(20000,imageInByte,destPic);
                  } catch (IOException e) {
                      System.out.println(e.getMessage());
                  }
              }

          }

          posted on 2013-03-26 16:46 paulwong 閱讀(364) 評(píng)論(0)  編輯  收藏 所屬分類: J2SE

          主站蜘蛛池模板: 镇远县| 朝阳区| 莱阳市| 天水市| 邹城市| 灵石县| 阿巴嘎旗| 榆中县| 黄梅县| 绍兴市| 邻水| 陈巴尔虎旗| 乐陵市| 谷城县| 洛扎县| 德化县| 宁陵县| 横峰县| 吴忠市| 石楼县| 即墨市| 临江市| 阆中市| 钟祥市| 方正县| 杭锦后旗| 洛扎县| 旌德县| 遵化市| 新兴县| 海盐县| 廉江市| 宜章县| 庄河市| 阿尔山市| 仪征市| 五台县| 十堰市| 榕江县| 新和县| 乌恰县|