admin 发表于 2014-3-6 09:45

java的2中高清压缩图片的方法 亲测

java的2中高清压缩图片的方法 亲测
        /**
       * 压缩图片方法
       *
       * @param oldFile
       *            要压缩的图片路径
       * @param newFile
       *            压缩后添加的后缀名(在扩展名前添加,不会改变格式)
       * @param width
       *            压缩宽
       * @param height
       *            压缩高
       * @param percentage
       *            是否等比例压缩,true则宽高比自动调整
       * @return
       * @throws Exception
       */
        public static void reduceImg(String oldFile,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(oldFile);
                                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(oldFile);
                                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                                encoder.encode(tag);
                                out.close();
                        }
                } catch (IOException ex) {
                        ex.printStackTrace();
                }
        }
测试 main方法
public static void main(String[] args) {
                reduceImg("C:/Users/Administrator/Desktop/图片/4927782417373561737.jpg",600, 600, true);
                System.out.print("ok…");
        }


uperの小鬼 发表于 2014-3-10 21:29

找了好久了 不错下来看看
页: [1]
查看完整版本: java的2中高清压缩图片的方法 亲测