Android图片压缩方法并压缩到指定大小
发布时间 - 2026-01-11 02:11:46 点击率:次一、图片质量压缩
/**
* 质量压缩方法
* @param image
* @return
*/
public static Bitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options = 90;
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;
}
二、按比例大小压缩 (路径获取图片)
/**
* 图片按比例大小压缩方法
* @param srcPath (根据路径获取图片并压缩)
* @return
*/
public static 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)
/**
* 图片按比例大小压缩方法
* @param image (根据Bitmap图片压缩)
* @return
*/
public static Bitmap compressScale(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
// 判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
if (baos.toByteArray().length / 1024 > 1024) {
baos.reset();// 重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG, 80, 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;
Log.i(TAG, w + "---------------" + h);
// 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
// float hh = 800f;// 这里设置高度为800f
// float ww = 480f;// 这里设置宽度为480f
float hh = 512f;
float ww = 512f;
// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
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; // 设置缩放比例
// newOpts.inPreferredConfig = Config.RGB_565;//降低图片从ARGB888到RGB565
// 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
isBm = new ByteArrayInputStream(baos.toByteArray());
bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩
//return bitmap;
}
以上所述是小编给大家介绍的Android图片压缩方法并压缩到指定大小,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# 图片压缩到指定大小
# 图片压缩
# Android实现图片压缩(bitmap的六种压缩方式)
# Android开发之图片压缩实现方法分析
# Android图片压缩几种方式总结
# Android开发实现图片大小与质量压缩及保存
# 按比例
# 其中一个
# 比较多
# 设置为
# 小编
# 清空
# 度高
# 以高
# 在此
# 给大家
# 每次都
# 所述
# 给我留言
# 感谢大家
# 为空
# 疑问请
# 有任何
# isBm
# int
# JPEG
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
如何构建满足综合性能需求的优质建站方案?
bing浏览器学术搜索入口_bing学术文献检索地址
音乐网站服务器如何优化API响应速度?
js实现获取鼠标当前的位置
在centOS 7安装mysql 5.7的详细教程
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
动图在线制作网站有哪些,滑动动图图集怎么做?
Linux系统运维自动化项目教程_Ansible批量管理实战
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Laravel怎么在Blade中安全地输出原始HTML内容
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Bootstrap整体框架之JavaScript插件架构
如何在Windows环境下新建FTP站点并设置权限?
简历没回改:利用AI润色让你的文字更专业
Laravel如何实现文件上传和存储?(本地与S3配置)
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何获取PHP WAP自助建站系统源码?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
如何在IIS中配置站点IP、端口及主机头?
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
如何在阿里云虚拟主机上快速搭建个人网站?
如何在建站宝盒中设置产品搜索功能?
北京网站制作的公司有哪些,北京白云观官方网站?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
大学网站设计制作软件有哪些,如何将网站制作成自己app?
长沙做网站要多少钱,长沙国安网络怎么样?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
太平洋网站制作公司,网络用语太平洋是什么意思?
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Laravel如何实现API速率限制?(Rate Limiting教程)
Laravel如何实现多对多模型关联?(Eloquent教程)
如何用VPS主机快速搭建个人网站?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
Android使用GridView实现日历的简单功能
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
如何在搬瓦工VPS快速搭建网站?
详解Android图表 MPAndroidChart折线图
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
手机软键盘弹出时影响布局的解决方法
EditPlus中的正则表达式实战(5)
Android中AutoCompleteTextView自动提示

