压缩图片

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());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值