博客
关于我
java图片压缩技术-不错
阅读量:575 次
发布时间:2019-03-11

本文共 4120 字,大约阅读时间需要 13 分钟。

优化后的文章内容如下:(注:去除所有HTML标签,仅保留纯文本内容)---图片压缩工具类(通用)本Java类可将支持JPEG、BMP、PNG、GIF格式的图片文件进行等比或非等比缩放处理,生成缩略图。该工具主要用于将大图片文件转换为适当大小的可显示图片,常用于Web展示或存储缩略版图片。以下是主要功能及其实现方法:基本配置说明1. 输入路径* `inputDir`:输入图片所在目录路径* `inputFileName`:输入图片文件名2. 输出路径* `outputDir`:输出缩略图所在目录路径* `outputFileName`:输出缩略图文件名3. 缩略图尺寸* `outputWidth`:默认生成的缩略图宽度,默认为100像素* `outputHeight`:默认生成的缩略图高度,默认为100像素4. 缩放模式* `proportion`:是否启用等比缩放,默认启用(true)操作方法1. 类对象初始化```javapublic CompressPic() {    inputDir = "";    outputDir = "";    inputFileName = "";    outputFileName = "";    outputWidth = 100;    outputHeight = 100;}
  1. 设置输入路径
  2. public void setInputDir(String inputDir) {    this.inputDir = inputDir;}
    1. 设置输出路径
    2. public void setOutputDir(String outputDir) {    this.outputDir = outputDir;}
      1. 设置输入图片文件名
      2. public void setInputFileName(String inputFileName) {    this.inputFileName = inputFileName;}
        1. 设置输出文件名
        2. public void setOutputFileName(String outputFileName) {    this.outputFileName = outputFileName;}
          1. 设置缩略图尺寸
          2. public void setOutputWidth(int outputWidth) {    this.outputWidth = outputWidth;}
            1. 设置缩略图高度
            2. public void setOutputHeight(int outputHeight) {    this.outputHeight = outputHeight;}
              1. 设置缩略图尺寸
              2. public void setWidthAndHeight(int width, int height) {    this.outputWidth = width;    this.outputHeight = height;}

                图片处理功能

              3. 获取图片文件大小
              4. public long getPicSize(String path) {    File file = new File(path);    return file.length();}
                1. 执行图片压缩
                2. public String compressPic() {    try {        File file = new File(inputDir + inputFileName);        if (!file.exists()) {            throw new Exception("输入图片不存在");        }        BufferedImage img = ImageIO.read(file);        if (img.getWidth(null) == -1) {            System.out.println("图片无法加载,请稍后重试");            return "no";        }        // 确定缩放比例        if (proportion == true) {            double rateWidth = img.getWidth(null) / (outputWidth + 0.1);            double rateHeight = img.getHeight(null) / (outputHeight + 0.1);            double rate = Math.min(rateWidth, rateHeight);            int newWidth = (int) (img.getWidth(null) / rate);            int newHeight = (int) (img.getHeight(null) / rate);        } else {            int newWidth = outputWidth;            int newHeight = outputHeight;        }        // 生成缩略图        BufferedImage thumbnail = new BufferedImage(            newWidth,            newHeight,            BufferedImage.TYPE_INT_RGB        );        Graphics imgGraphics = thumbnail.getGraphics();        imgGraphics.drawImage(            img.getScaledInstance(                newWidth,                newHeight,                Image.SCALE_SMOOTH            ),            0,            0,            null        );        imgGraphics.dispose();        // 保存缩略图        File outputDirFile = new File(outputDir);        if (!outputDirFile.exists()) {            outputDirFile.mkdirs();        }        File outputesátFile = new File(outputDir + outputFileName);        FileOutputStream out = new FileOutputStream( oscillatFile );        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);        encoder.encode(thumbnail);        out.close();        return "ok";    } catch (IOException e) {        e.printStackTrace();    }    return "no";}

                  多种调用方式

                3. 简单调用(仅传入输入输出文件名)
                4. public String compressPic() {    return compressPic("");}
                  1. 全参数调用
                  2. public String compressPic(String inputDir,                         String outputDir,                         String inputFileName,                         String outputFileName,                         int width,                         int height,                         boolean proportion) {    this.inputDir = inputDir;    this.outputDir = outputDir;    this.inputFileName = inputFileName;    this.outputFileName = outputFileName;    this.outputWidth = width;    this.outputHeight = height;    this.proportion = proportion;    return compressPic();}

                    使用说明

                  3. 对于源文件路径的构建,主类将自动拼接Dir和FileName,如:inputDir + inputFileName
                  4. 所有新文件将放在outputDir下名为outputFileName
                  5. 如果构建的outputDir不存在,将自动生成此目录
                  6. 提供JPEG编码器处理,支持一部分图片格式的转换,具体取决于ImageIO实现
                  7. 注意事项

                    • 确保引入所有必要的外部库资源
                    • 做好错误处理,避免因缺失文件而导致异常
                    • 建议在使用前测试Compression配置,确保正确生成缩略图
                    • 注意图片缩放算法的选择,Image.SCALE_SMOOTH提供了更平滑的缩放效果

                    这样优化后的文档不仅语言更加流畅自然,还方便于搜索引擎优化,具有可读性和可索引性。

转载地址:http://ielvz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现Adler32算法(附完整源码)
查看>>
Objective-C实现AES算法(附完整源码)
查看>>
Objective-C实现AffineCipher仿射密码算法(附完整源码)
查看>>
Objective-C实现aliquot sum等分求和算法(附完整源码)
查看>>
Objective-C实现all combinations所有组合算法(附完整源码)
查看>>
Objective-C实现all permutations所有排列算法(附完整源码)
查看>>
Objective-C实现all subsequences所有子序列算法(附完整源码)
查看>>
Objective-C实现AlphaNumericalSort字母数字排序算法(附完整源码)
查看>>
Objective-C实现alternate disjoint set不相交集算法(附完整源码)
查看>>
Objective-C实现alternative list arrange备选列表排列算法(附完整源码)
查看>>
Objective-C实现An Armstrong number阿姆斯特朗数算法(附完整源码)
查看>>
Objective-C实现anagrams字谜算法(附完整源码)
查看>>
Objective-C实现ApproximationMonteCarlo蒙特卡洛方法计算pi值算法 (附完整源码)
查看>>
Objective-C实现area under curve曲线下面积算法(附完整源码)
查看>>
Objective-C实现argmax函数功能(附完整源码)
查看>>
Objective-C实现arithmetic算术算法(附完整源码)
查看>>
Objective-C实现armstrong numbers阿姆斯壮数算法(附完整源码)
查看>>
Objective-C实现articulation-points(关键点)(割点)算法(附完整源码)
查看>>