`
z_jiankun
  • 浏览: 159530 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JPGE图片压缩

    博客分类:
  • Java
阅读更多

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

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

public class PicCompression
{
    /**
     * 压缩图片方法
     *
     * @param oldFile 要压缩的图片路径
     * @param newFile 压缩后添加的后缀名(在扩展名前添加,不会改变格式)
     * @param width 压缩宽
     * @param height 压缩高
     * @param percentage 是否等比例压缩,true则宽高比自动调整
     * @return
     * @throws Exception
     */
    public static void reduceImg(String oldFile, String newFile, int widthdist, int heightdist, boolean percentage)
    {
        try
        {
            File srcfile = new File(oldFile);
            if (!srcfile.exists())
            {
                return;
            }
            Image src = javax.imageio.ImageIO.read(srcfile);
           
            if (percentage)
            {
                // 为等比压缩计算输出的宽高
                double rate1 = ((double)src.getWidth(null)) / (double)widthdist + 0.1;
                double rate2 = ((double)src.getHeight(null)) / (double)heightdist + 0.1;
                double rate = rate1 > rate2 ? rate1 : rate2;
               
                int new_w = (int)(((double)src.getWidth(null)) / rate);
                int new_h = (int)(((double)src.getHeight(null)) / rate);
                // 设定宽高
                BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
               
                // 设定文件扩展名
                String filePrex = oldFile.substring(0, oldFile.lastIndexOf('.'));
                newFile = filePrex + "SCALE_AREA_AVERAGING" + oldFile.substring(filePrex.length());
                // 生成图片
                // 两种方法,效果与质量都相同,效率差不多
                // tag.getGraphics().drawImage(src.getScaledInstance(widthdist,heightdist, Image.SCALE_SMOOTH), 0, 0,
                // null);
                tag.getGraphics()
                    .drawImage(src.getScaledInstance(new_w, new_h, Image.SCALE_AREA_AVERAGING), 0, 0, null);
                FileOutputStream out = new FileOutputStream(newFile);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                encoder.encode(tag);
                out.close();
            }
            else
            {
                // 设定宽高
                BufferedImage tag = new BufferedImage(widthdist, heightdist, BufferedImage.TYPE_INT_RGB);
               
                // 设定文件扩展名
                String filePrex = oldFile.substring(0, oldFile.lastIndexOf('.'));
                newFile = filePrex + "SCALE_AREA_AVERAGING" + newFile + oldFile.substring(filePrex.length());
                // 生成图片
                // 两种方法,效果与质量都相同,第二种效率比第一种高,约一倍
                // tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0,
                // null);
                tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_AREA_AVERAGING),
                    0,
                    0,
                    null);
                FileOutputStream out = new FileOutputStream(newFile);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                encoder.encode(tag);
                out.close();
            }
           
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
    }
   
    public static void main(String[] args)
    {
        PicCompression.reduceImg("D:/30.jpg", "D:/20.jpg", 600, 600, true);
        System.out.print("ok…");
    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics