Android 图片压缩

图片压缩技巧
部署运行你感兴趣的模型镜像

质量压缩:

private Bitmap compressImage(Bitmap image) {  

  

        ByteArrayOutputStream baos = new ByteArrayOutputStream();  

        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中  

        int options = 100;  

        while ( baos.toByteArray().length / 1024>100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩         

            baos.reset();//重置baos即清空baos  

            image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中  

            options -= 10;//每次都减少10  

        }  

        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中  

        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片  

        return bitmap;  

    }  

 

比例压缩:

private Bitmap getimage(String srcPath) {  

        BitmapFactory.Options newOpts = new BitmapFactory.Options();  

        //开始读入图片,此时把options.inJustDecodeBounds 设回true了  

        newOpts.inJustDecodeBounds = true;  

        Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空  

          

        newOpts.inJustDecodeBounds = false;  

        int w = newOpts.outWidth;  

        int h = newOpts.outHeight;  

        //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为  

        float hh = 800f;//这里设置高度为800f  

        float ww = 480f;//这里设置宽度为480f  

        //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可  

        int be = 1;//be=1表示不缩放  

        if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放  

            be = (int) (newOpts.outWidth / ww);  

        } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放  

            be = (int) (newOpts.outHeight / hh);  

        }  

        if (be <= 0)  

            be = 1;  

        newOpts.inSampleSize = be;//设置缩放比例  

        //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了  

        bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  

        return compressImage(bitmap);//压缩好比例大小后再进行质量压缩  

    }  

 

Bitmap 比例压缩:

private Bitmap comp(Bitmap image) {  

      

    ByteArrayOutputStream baos = new ByteArrayOutputStream();         

    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);  

    if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出    

        baos.reset();//重置baos即清空baos  

        image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中  

    }  

    ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());  

    BitmapFactory.Options newOpts = new BitmapFactory.Options();  

    //开始读入图片,此时把options.inJustDecodeBounds 设回true了  

    newOpts.inJustDecodeBounds = true;  

    Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  

    newOpts.inJustDecodeBounds = false;  

    int w = newOpts.outWidth;  

    int h = newOpts.outHeight;  

    //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为  

    float hh = 800f;//这里设置高度为800f  

    float ww = 480f;//这里设置宽度为480f  

    //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可  

    int be = 1;//be=1表示不缩放  

    if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放  

        be = (int) (newOpts.outWidth / ww);  

    } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放  

        be = (int) (newOpts.outHeight / hh);  

    }  

    if (be <= 0)  

        be = 1;  

    newOpts.inSampleSize = be;//设置缩放比例  

    //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了  

    isBm = new ByteArrayInputStream(baos.toByteArray());  

    bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  

    return compressImage(bitmap);//压缩好比例大小后再进行质量压缩  

}  

您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

内容概要:本文介绍了一个基于MATLAB实现的无人机三维路径规划项目,采用蚁群算法(ACO)与多层感知机(MLP)相结合的混合模型(ACO-MLP)。该模型通过三维环境离散化建模,利用ACO进行全局路径搜索,并引入MLP对环境特征进行自适应学习与启发因子优化,实现路径的动态调整与多目标优化。项目解决了高维空间建模、动态障碍规避、局部最优陷阱、算法实时性及多目标权衡等关键技术难题,结合并行计算与参数自适应机制,提升了路径规划的智能性、安全性和工程适用性。文中提供了详细的模型架构、核心算法流程及MATLAB代码示例,涵盖空间建模、信息素更新、MLP训练与融合优化等关键步骤。; 适合人群:具备一定MATLAB编程基础,熟悉智能优化算法与神经网络的高校学生、科研人员及从事无人机路径规划相关工作的工程师;适合从事智能无人系统、自动驾驶、机器人导航等领域的研究人员; 使用场景及目标:①应用于复杂三维环境下的无人机路径规划,如城市物流、灾害救援、军事侦察等场景;②实现飞行安全、能耗优化、路径平滑与实时避障等多目标协同优化;③为智能无人系统的自主决策与环境适应能力提供算法支持; 阅读建议:此资源结合理论模型与MATLAB实践,建议读者在理解ACO与MLP基本原理的基础上,结合代码示例进行仿真调试,重点关注ACO-MLP融合机制、多目标优化函数设计及参数自适应策略的实现,以深入掌握混合智能算法在工程中的应用方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值