压缩图片

来源:互联网 发布:法丽达官网 只有淘宝店 编辑:程序博客网 时间:2024/06/13 20:24
package com.ruidun.util;

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

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Created by huidun on 2016/7/26.
 */
public class ceshi {
    /**
     * 缩放图片(压缩图片质量,改变图片尺寸)
     * 若原图宽度小于新宽度,则宽度不变!
     * @param newWidth 新的宽度
     * @param quality 图片质量参数 0.7f 相当于70%质量
     * 2015年12月11日
     */
   public static void resize(File originalFileFile resizedFile,
                              int newWidth, float quality) throws IOException {

        if (quality > 1) {
            throw new IllegalArgumentException(
                   "Quality has to be between 0 and 1");
       }

        ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());
       Image i = ii.getImage();
       Image resizedImage = null;

        int iWidth = i.getWidth(null);
        int iHeight = i.getHeight(null);

        if(iWidth < newWidth){
            newWidth = iWidth;
       }
        if (iWidth > iHeight) {
            resizedImage = i.getScaledInstance(newWidth(newWidth * iHeight)
                    / iWidthImage.SCALE_SMOOTH);
       else {
            resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight,
                   newWidthImage.SCALE_SMOOTH);
       }

        // This code ensures that all the pixels in the image are loaded.
       Image temp = new ImageIcon(resizedImage).getImage();

       // Create the buffered image.
       BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null),
               temp.getHeight(null)BufferedImage.TYPE_INT_RGB);

       // Copy image to buffered image.
       Graphics g = bufferedImage.createGraphics();

       // Clear background and paint the image.
       g.setColor(Color.white);
       g.fillRect(00temp.getWidth(null)temp.getHeight(null));
       g.drawImage(temp00, null);
       g.dispose();

       // Soften.
       float softenFactor = 0.05f;
        float[] softenArray = { 0softenFactor0softenFactor,
               - (softenFactor * 4)softenFactor0softenFactor};
       Kernel kernel = new Kernel(33softenArray);
       ConvolveOp cOp = new ConvolveOp(kernelConvolveOp.EDGE_NO_OP, null);
       bufferedImage = cOp.filter(bufferedImage, null);

       // Write the jpeg to a file.
       FileOutputStream out = new FileOutputStream(resizedFile);

       // Encodes image as a JPEG data stream
       JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

       JPEGEncodeParam param = encoder
                .getDefaultJPEGEncodeParam(bufferedImage);

       param.setQuality(quality, true);

       encoder.setJPEGEncodeParam(param);
       encoder.encode(bufferedImage);
   // Example usage

   public static void main(String[] args) throws IOException {
//       File originalImage = new File("C:\\11.jpg");
//       resize(originalImage, new File("c:\\11-0.jpg"),150, 0.7f);
//       resize(originalImage, new File("c:\\11-1.jpg"),150, 1f);
       File originalImage = new File("d:\\1.jpg");
       System.out.println("源文件大小" + originalImage.length());
//         File resizedImg = new File("d:\\testImg\\11.jpg");
//         resize(originalImage, resizedImg, 850, 1f);
//         System.out.println("0.5转换后文件大小" + resizedImg.length());
//         File resizedImg1 = new File("d:\\testImg\\111.jpg");
       File resizedImg1 = new File("d:\\1.jpg");
       resize(originalImageresizedImg115500.7f);
       System.out.println("0.7转换后文件大小" + resizedImg1.length());
   }
}
0 0
原创粉丝点击