`

ImageCompressUtils

阅读更多
package com.movitech.johnson.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class ImageCompressUtils {
    public static final int FILE_SIZE = 3 * 1024; // kb
    public static final int FILE_SIZE_BYTE = 3 * 1024 * 1024;

    public static String getThumbUploadPath(String oldPath, int bitmapMaxWidth) throws Exception {
        if (getFileSize(oldPath) < FILE_SIZE_BYTE) {
            return oldPath;
        }
        String newPath = oldPath.substring(0, oldPath.lastIndexOf(".")) + "_resize"
                         + oldPath.substring(oldPath.lastIndexOf("."), oldPath.length());
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(oldPath, options);
        int height = options.outHeight;
        int width = options.outWidth;
        int reqHeight = 0;
        int reqWidth = bitmapMaxWidth;
        reqHeight = (reqWidth * height) / width;
        // 在内存中创建bitmap对象,这个对象按照缩放大小创建
        options.inSampleSize = calculateInSampleSize(options, bitmapMaxWidth, reqHeight);
        options.inJustDecodeBounds = false;
        Bitmap bitmap = BitmapFactory.decodeFile(oldPath, options);
        Bitmap bbb = compressImage(Bitmap.createScaledBitmap(bitmap, bitmapMaxWidth, reqHeight, false));
        return saveImg(bbb, newPath);
    }

    public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
        // Raw height and width of image
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;
        if (height > reqHeight || width > reqWidth) {
            if (width > height) {
                inSampleSize = Math.round((float) height / (float) reqHeight);
            } else {
                inSampleSize = Math.round((float) width / (float) reqWidth);
            }
        }
        return inSampleSize;
    }

    public static Bitmap compressImage(Bitmap image) {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.JPEG, 80, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
        int options = 100;
        while ((baos.toByteArray().length / 1024 > FILE_SIZE) && options > 10) { // 循环判断如果压缩后图片是否大于3
                                                                                 // *
                                                                                 // 1024
                                                                                 // kb,大于继续压缩
            options -= 10;// 每次都减少10
            baos.reset();// 重置baos即清空baos
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中
        }
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片
        return bitmap;
    }

    public static String saveImg(Bitmap b, String newPath) throws Exception {
        File mediaFile = new File(newPath);
        mediaFile.createNewFile();
        FileOutputStream fos = new FileOutputStream(mediaFile);
        b.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();
        b.recycle();
        b = null;
        System.gc();
        return mediaFile.getPath();
    }

    public static int getFileSize(String path) {
        int fileSize = 0;
        FileInputStream fis;
        try {
            fis = new FileInputStream(path);
            fileSize = fis.available();
            return fileSize;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return fileSize;
        } catch (IOException e) {
            e.printStackTrace();
            return fileSize;
        }
    }

}

 

分享到:
评论

相关推荐

    压缩照片工具类.zip

    在IT行业中,图片压缩是一个常见的需求,特别是在存储和传输大量图像数据时。这个"压缩照片工具类.zip...通过`ImageCompressUtils`进行压缩,`CompressResult`记录和返回压缩结果,而`FileTest`确保所有功能的正确性。

    铌酸锂基有源无源器件系列建模仿真:从光栅到电光调制器的探索,一.铌酸锂基有源和无源器件系列,FDTD MODE COMSOL建模仿真 1.一维光栅 2.MMI型分束器 3.波导型偏振旋转控制器,定向耦

    铌酸锂基有源无源器件系列建模仿真:从光栅到电光调制器的探索,一.铌酸锂基有源和无源器件系列,FDTD MODE COMSOL建模仿真 1.一维光栅 2.MMI型分束器 3.波导型偏振旋转控制器,定向耦合器 4.铌酸锂电光调制器建模仿真 ,铌酸锂基;有源无源器件系列;FDTD MODE COMSOL建模仿真;一维光栅;MMI型分束器;波导型偏振旋转控制器;定向耦合器;铌酸锂电光调制器建模仿真。,"铌酸锂器件建模:光栅与波导偏振调控"

    Java毕业设计-springboot-vue-汽车票网上预订系统(源码+sql脚本+29页零基础部署图文详解+27页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 Spring Boot 框架搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE 框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    前端-Vue-记事本-添加,清除,添加,展示功能

    是一个简单的记事本应用,使用了Vue.js框架来构建。这个应用允许用户添加、显示和删除任务。 HTML结构 头部 (<header>): 包含应用名称("xback记事本")和一个输入框(用于输入新任务),以及一个按钮("添加任务"),用于将输入框中的内容作为新任务添加到列表中。 主体区域 (<section class="main">): 显示任务列表。每个任务都是一个列表项(<li>),包含任务的序号、内容和删除按钮。 底部 (<footer>): 当存在任务时显示,包含两个元素:一个显示当前任务总数的统计信息,和一个按钮("清空任务"),用于删除所有任务。 交互 用户可以在输入框中输入新任务,然后点击"添加任务"按钮将其添加到列表中。 每个任务旁边都有一个删除按钮,点击后可以删除对应的任务。 如果存在任务,底部会显示任务总数,并提供一个"清空任务"按钮,点击后可以删除所有任务。

    Gigabyte Z97X-UD3-H 主板 BIOS 更新教程并提供f7版本bios

    Gigabyte Z97X-UD3-H f7版本bios

    HD Tune Pro6.0

    HD Tune Pro6.0

    COMSOL 6.1模型仿真探究光纤等波导三维弯曲的模场分布与波束包络方法,COMSOL模型仿真光纤等波导的三维弯曲,模场分布,波束包络方法 Comsol6.1版本自建仿真模型 ,核心关键词:COMS

    COMSOL 6.1模型仿真探究光纤等波导三维弯曲的模场分布与波束包络方法,COMSOL模型仿真光纤等波导的三维弯曲,模场分布,波束包络方法 Comsol6.1版本自建仿真模型 ,核心关键词:COMSOL模型; 光纤等波导; 三维弯曲; 模场分布; 波束包络方法; Comsol6.1版本; 自建仿真模型。,"COMSOL 6.1:仿真光纤等波导三维弯曲的模场分布与波束包络方法"

    2025年辐射安全与防护培训考试试题(含答案).docx

    2025年辐射安全与防护培训考试试题(含答案).docx

    2025年材料员网络培训考试题库及答案.pptx

    2025年材料员网络培训考试题库及答案.pptx

    Java毕业设计-springboot-vue-房产销售系统(源码+sql脚本+29页零基础部署图文详解+35页论文+14页答辩+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:配套答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 Spring Boot 框架搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE 框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    Java毕业设计-springboot-vue-可盈保险合同管理系统(源码+sql脚本+29页零基础部署图文详解+31页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    Java毕业设计-springboot-vue-学生宿舍管理系统(源码+sql脚本+29页零基础部署图文详解+42页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 Spring Boot 框架搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE 框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    Matlab Simulink下的双馈风机风电调频技术研究:虚拟惯性惯量与下垂控制应用,风电场仿真优化及快速仿真分析,matlab simulink 双馈风机调频,风电调频,一次调频,风电场调频,三机

    Matlab Simulink下的双馈风机风电调频技术研究:虚拟惯性惯量与下垂控制应用,风电场仿真优化及快速仿真分析,matlab simulink 双馈风机调频,风电调频,一次调频,风电场调频,三机九节点,带有惯性惯量控制,下垂控制。 风电渗透20%,同步机调频,火电水电机组调频,phasor模型,仿真速度快,只需要20秒 ,MATLAB; Simulink; 双馈风机调频; 风电调频; 一次调频; 风电场调频; 虚拟惯性惯量控制; 下垂控制; 20%风电渗透; 同步机调频; 火电水电机组调频; Phasor模型; 仿真速度。,"Matlab Simulink双馈风机与多类型机组协同调频技术"

    AI原生应用开发:提示工程原理与实战-全书配图.pptx

    本书结合 AI 原生应用落地的大量实践,系统讲解提示工程的核心原理、相关案例分析和实战技巧,涵盖以下内容:提示工程概述、结构化提示设计、NLP 任务提示、内容创作提示、生成可控性提示、提示安全设计、形式语言风格提示、推理提示、智能体提示等。 本书的初衷不是告诉读者如何套用各种预设的提示模板,而是帮助读者深入理解和应用提示设计技巧,以找到决定大语言模型输出的关键因子,进而将提示工程的理论知识应用到产品设计中。 本书适合 AI 原生应用开发的从业者和研究人员,以及人工智能相关专业的教师和学生阅读。

    《已调试》SpringBoot OA办公权限管理系统(源码+sql).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    2025年海洋知识竞赛题及答案.doc

    2025年海洋知识竞赛题及答案.doc

    springboot个人博客项目.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    2025年计算机基础理论信息安全基本知识试题及答案.docx

    2025年计算机基础理论信息安全基本知识试题及答案.docx

    Java毕业设计-springboot-vue-美发门店管理系统(源码+sql脚本+29页零基础部署图文详解+30页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 Spring Boot 框架搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE 框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    554springcloud房产销售平台.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

Global site tag (gtag.js) - Google Analytics