zoukankan      html  css  js  c++  java
  • 图片按质量压缩

    图片按质量压缩

        /***
         * author : dai xianjun
         * 按图片质量,压缩图片,直到小于制定的存储空间
         * @param originalFilePath
         * @param resizedFilePath
         * @param quality
         * @return
         * @throws IOException
         */
        public static boolean resizeByQuality(String originalFilePath, String resizedFilePath, float quality) throws IOException {
            if (quality > 1) {
                throw new IllegalArgumentException("Quality has to be between 0 and 1");
            }
            File originalFile = new File(originalFilePath);
            if (!originalFile.exists()){
                DkdLogger.error("resize",false,"originalFile is not exist,originalFilePath =: " + originalFilePath);
                return false;
            }
            ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());
            Image image = ii.getImage();
            Image resizedImage = null;
            resizedImage = image.getScaledInstance(image.getWidth(null), image.getHeight(null), 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, 1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 };
            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(new File(resizedFilePath));
    
            // 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);
            return true;
        }
  • 相关阅读:
    自动档汽车档位介绍和驾驶知识与技巧
    4岁儿童发育指标与食谱指导
    0130 Lesson 13:Talking About Occupations 谈论职业
    [ python ] 列表和字符串的查找功能
    [ python ] 字典类型的一些注意问题
    [ python ] input()和raw_input()
    [ js ] 可否用多线程的思路,解决大数量数据的性能问题?
    python中对文件、文件夹的操作
    [ js ] 可否用多线程的思路,解决大数量数据的性能问题?
    [ python ] 字典类型的一些注意问题
  • 原文地址:https://www.cnblogs.com/daixianjun/p/resize-by-quality.html
Copyright © 2011-2022 走看看