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 閱讀(357) 評論(0)  編輯  收藏 所屬分類: J2SE

          主站蜘蛛池模板: 英山县| 酒泉市| 余干县| 湖南省| 金川县| 子洲县| 邛崃市| 蛟河市| 关岭| 迭部县| 商都县| 民县| 津南区| 海阳市| 桂平市| 改则县| 永和县| 武平县| 惠州市| 玉林市| 腾冲县| 博湖县| 桐梓县| 若尔盖县| 蒙自县| 江油市| 阳谷县| 冕宁县| 尚志市| 凌海市| 和政县| 东山县| 新绛县| 水富县| 嵊州市| 马山县| 敖汉旗| 繁昌县| 白银市| 铜鼓县| 香格里拉县|