图片压缩


package com.web.common;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class CompressPicDemo {
private static boolean proportion = true; // 是否等比缩放标记(默认为等比缩放)

/*
  * 获得图片大小 传入参数 String path :图片路径
  */

// 图片处理
public static String compressPic(String inputFile, String outFile,
   int width, int height) {

  try {
   // 获得源文件
   File file = new File(inputFile);
   if (!file.exists()) {
    return "";
   }
   Image img = ImageIO.read(file);
   // 判断图片格式是否正确
   if (img.getWidth(null) == -1) {
    return "no";
   } else {
    double scaleW = ((double) img.getWidth(null) / (double) width);
    double scaleY = ((double) img.getHeight(null) / (double) height);
    if (scaleW > 1 && scaleY > 1) {
     proportion = true;
    } else {
     proportion = false;
    }
    int newWidth;
    int newHeight;
    // 判断是否是等比缩放
    if (proportion == true) {
     // 为等比缩放计算输出的图片宽度及高度
     double rate1 = ((double) img.getWidth(null))
       / (double) width + 0.1;
     double rate2 = ((double) img.getHeight(null))
       / (double) height + 0.1;
     // 根据缩放比率大的进行缩放控制
     double rate = rate1 > rate2 ? rate1 : rate2;
     newWidth = (int) (((double) img.getWidth(null)) / rate);
     newHeight = (int) (((double) img.getHeight(null)) / rate);
    } else {
     newWidth = img.getWidth(null); // 输出的图片宽度
     newHeight = img.getHeight(null); // 输出的图片高度
    }
    BufferedImage tag = new BufferedImage((int) newWidth,
      (int) newHeight, BufferedImage.TYPE_INT_RGB);

    /*
     * Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢
     */
    tag.getGraphics().drawImage(
      img.getScaledInstance(newWidth, newHeight,
        Image.SCALE_SMOOTH), 0, 0, null);
    FileOutputStream out = new FileOutputStream(outFile);
    // JPEGImageEncoder可适用于其他图片类型的转换
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    encoder.encode(tag);
    out.close();
   }
  } catch (IOException ex) {
   ex.printStackTrace();
  }
  return "ok";
}

// main测试
// compressPic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))
public static void main(String[] arg) {
  compressPic("E:\\opt\\a.jpg", "E:\\opt\\2-1.jpg", 800, 600);
  /**
   * compressPic("", "",800,600);
   */
}

}

 

你可能感兴趣的:(压缩)