JAVA文件压缩

package com.fh.tool;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.io.FileNotFoundException;
import java.io.IOException;


import com.sun.image.codec.jpeg.JPEGEncodeParam;
/**
 * Created by 菜园子 on 2018/7/20.
 */
public class ReduceImgTool {

    /**
     * 获取图片宽度和高度
     *
     * @return 返回图片的宽度
     */
    public static int[] getImgWidthHeight(File file) {
        InputStream is = null;
        BufferedImage src = null;
        int result[] = { 0, 0 };
        try {
            // 获得文件输入流
            is = new FileInputStream(file);
            // 从流里将图片写入缓冲图片区
            src = ImageIO.read(is);
            result[0] =src.getWidth(null); // 得到源图片宽
            result[1] =src.getHeight(null);// 得到源图片高
            is.close();  //关闭输入流
        } catch (Exception ef) {
            ef.printStackTrace();
        }

        return result;
    }

    /**
     *
     * @param oldFile 文件原路径
     * @param width  宽度
     * @param height 高度
     * @param quality  压缩比例
     * @param smallIcon  
     * @return
     */
    public static String zipImageFile(String oldFile, int width, int height,
                                      float quality, String smallIcon) {
        if (oldFile == null) {
            return null;
        }
        String newImage = null;
        try {
            /**对服务器上的临时文件进行处理 */
            Image srcFile = ImageIO.read(new File(oldFile));
            /** 宽,高设定 */
            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);
            String filePrex = oldFile.substring(0, oldFile.indexOf('.'));
            /** 压缩后的文件名 */
            newImage = filePrex + smallIcon + oldFile.substring(filePrex.length());
            /** 压缩之后临时存放位置 */
            FileOutputStream out = new FileOutputStream(newImage);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
            /** 压缩质量 */
            jep.setQuality(quality, true);
            encoder.encode(tag, jep);
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newImage;
    }

    public static void main(String[] args) {

        File srcfile = new File("F:\\file\\product\\rule\\1.jpg");
        File distfile = new File("F:\\file\\product\\rule\\1_1.jpg");

        System.out.println("压缩前图片大小:" + srcfile.length());
        zipImageFile("F:\\file\\product\\rule\\1.jpg",getImgWidthHeight(srcfile)[0],getImgWidthHeight(srcfile)[1],0.35f,"_1");
        System.out.println("压缩后图片大小:" + distfile.length());

    }
}

猜你喜欢

转载自blog.csdn.net/qq_34479912/article/details/81129725