美文网首页
Java 图片压缩 images

Java 图片压缩 images

作者: totzcc | 来源:发表于2016-03-07 13:12 被阅读1332次
    
    package com.totzcc;
    
    import java.awt.image.BufferedImage;
    import java.awt.image.ColorModel;
    import java.io.File;
    import java.io.FileOutputStream;
    
    import javax.imageio.IIOImage;
    import javax.imageio.ImageIO;
    import javax.imageio.ImageWriteParam;
    import javax.imageio.ImageWriter;
    import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
    
    public class Img {
        public static void main(String[] args) {
            if (compressPic("D:/1.jpg", "D:/2.jpg")) {
                System.out.println("压缩成功!");
            } else {
                System.out.println("压缩失败!");
            }
        }
    
        public static boolean compressPic(String srcFilePath, String descFilePath) {
            File file = null;
            BufferedImage src = null;
            FileOutputStream out = null;
            ImageWriter imgWrier;
            ImageWriteParam imgWriteParams;
    
            // 指定写图片的方式为 jpg
            imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
            imgWriteParams = new JPEGImageWriteParam(null);
            // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
            imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
            // 这里指定压缩的程度,参数qality是取值0~1范围内,
            imgWriteParams.setCompressionQuality((float) 0.8);
            imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
            ColorModel colorModel = ColorModel.getRGBdefault();
            // 指定压缩时使用的色彩模式
            imgWriteParams.setDestinationType(
                    new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16)));
    
            try {
                if (srcFilePath == null || srcFilePath.trim().length() == 0) {
                    return false;
                } else {
                    file = new File(srcFilePath);
                    src = ImageIO.read(file);
                    out = new FileOutputStream(descFilePath);
    
                    imgWrier.reset();
                    // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何
                    // OutputStream构造
                    imgWrier.setOutput(ImageIO.createImageOutputStream(out));
                    // 调用write方法,就可以向输入流写图片
                    imgWrier.write(null, new IIOImage(src, null, null), imgWriteParams);
                    out.flush();
                    out.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }
    }
    

    相关文章

      网友评论

          本文标题:Java 图片压缩 images

          本文链接:https://www.haomeiwen.com/subject/zggakttx.html