压缩图片

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 originalFile File 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)
                    / iWidth Image. SCALE_SMOOTH ) ;
        else  {
            resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight ,
                    newWidth Image. 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( 0 0 temp.getWidth( null ) temp.getHeight( null )) ;
        g.drawImage(temp 0 0 , null ) ;
        g.dispose() ;

        // Soften.
        float  softenFactor =  0.05f ;
        float [] softenArray = {  0 softenFactor 0 softenFactor ,
                - (softenFactor *  4 ) softenFactor 0 softenFactor } ;
        Kernel kernel =  new  Kernel( 3 3 softenArray) ;
        ConvolveOp cOp =  new  ConvolveOp(kernel ConvolveOp. 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 (originalImage resizedImg1 1550 0.7f ) ;
        System. out .println( "0.7转换后文件大小"  + resizedImg1.length()) ;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值