android压缩照片到指定大小100%可靠
最近,做到电子照片上传的功能,要求照片大小不能大于50kb,还有尽量保证质量!心想简单吧……是不是百度一下一箩筐!!!查看了一些发现一箩筐都是一样一样的。简单说一下网上的:1、bitmap质量压缩。2、bitmap图片比例缩放。3、根据path比例缩放图片。最后发现baos.toByteArray().length取到的照片大小与实际保存的大小不符。这是个大问题,得不到真实的图片大小,不能准确的压缩图片。
后来无意想起以前貌似在哪里看到资料说这个 inSampleSize
好像是 2 的 N 次方。看了官方文档,果然这么说的:默认会找一个最接近的 2 的 N 次方的整数。很显然问题就出在这里,它所找的最接近的很可能并不是我们所需要的,可能已经超过了限制。我们需要先对这个压缩比取 2 的对数,然后向上取整,最后再取2的指数得到正确的 inSampleSize
。抓紧时间一试……正解!
一下是代码:
public void compress(String srcPath) {
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float hh = dm.heightPixels;
float ww = dm.widthPixels;
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(srcPath, opts);
opts.inJustDecodeBounds = false;
int w = opts.outWidth;
int h = opts.outHeight;
int size = 0;
if (w <= ww && h <= hh) {
size = 1;
} else {
double scale = w >= h ? w / ww : h / hh;
double log = Math.log(scale) / Math.log(2);
double logCeil = Math.ceil(log);
size = (int) Math.pow(2, logCeil);
}
opts.inSampleSize = size;
bitmap = BitmapFactory.decodeFile(srcPath, opts);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
System.out.println(baos.toByteArray().length);
while (baos.toByteArray().length > 45 * 1024) {
baos.reset();
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
quality -= 20;
System.out.println(baos.toByteArray().length);
}
try {
baos.writeTo(new FileOutputStream("/mnt/sdcard/Servyou/photo/buffer/22.jpg"));
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
baos.flush();
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
现在太忙了,过短时间上传android调用系统相机拍照源码
android压缩照片到指定大小100%可靠相关推荐
- 快速批量压缩照片到指定大小工具,照片图片批量压缩实现方法,批量压缩工具
在工作中,会遇到在某些系统要上传照片,但是对于上传的照片大小有限制,比如限制大小不能超过1MB等,而外业拍摄的照片往往会超过限制的大小,那么这时就需要对照片进行压缩.但是外业照片数据巨大,人工逐张操作 ...
- Thumbnails压缩图片到指定大小
网上看了很多demo,很多都是照搬别人的代码,不管有没有问题,有的甚至递归不关流,还有的递归疯狂往自己磁盘写文件,递归一次写一次,我自己把网上的demo整理改了下发出来. /** * @Descrip ...
- JPG图片怎么压缩到30k内?如何压缩图片到指定大小?
现在各大网站对上传使用的图片都有大小的限制,有时我们在上传图片的时候会遇到图片要求要在30k以内的情况,在遇到这种情况的时候大家就可以使用在线照片处理器 (https://www.yasuotu.co ...
- 格式工厂怎样压缩视频到指定大小,如何设置参数?
第一种方法格式工厂压缩: 压缩在参数主要设置值,中默认的设置参数.这个值可以质量越好,文件大小越大,一般取值为之间.压缩后的视频容量视原视频的编码格式会有差异,可以压缩到方便了传输. 第二种方法51视 ...
- 如何压缩图片到500KB?怎么压缩图片到指定大小?
如何压缩图片到500KB?这就需要用到压缩啦的图片压缩指定大小工具,只需三步就可以轻松压缩图片大小kb,具体操作步骤如下: 1.使用浏览器打开压缩啦,选择图片压缩指定大小功能. 2.上传需要压缩的图片 ...
- linux 压缩固定大小,tar gz压缩文件为指定大小
tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个 ...
- java 压缩图片至指定大小
需求: 压缩图片至300k以下 一开始没有思路在网上搜,发现google有个插件叫Thumbnails,然后看到了这篇文章: https://blog.csdn.net/u010355502/arti ...
- python——实现压缩图片至指定大小
一.问题描述 遇到了一次那种要求上传图片,图片大小要在1M以内的,一开始尝试用python的cv2来resize实现,后来没成功,百度发现可以用以下方法实现. 二.代码如下 import os fro ...
- Android学习之压缩图片到指定大小
关于图片压缩,是为了上传服务器时有些地方有大小限制,因此,这里我总结了两种方法,个人感觉方法一比较准确一点. 方法一: * 图片压缩方法一* * 计算 bitmap大小,如果超过64kb,则进行压缩* ...
最新文章
- Matlab之switch-case语句
- 【若依(ruoyi)】菜单操作SQL
- js(Dom+Bom)第五天(1)
- 最优化5-8章重点(考试点全)
- leetcode46. 全排列(回溯)
- 154. Find Minimum in Rotated Sorted Array II
- Linux---主机字节序与网络字节序
- dialog问题记录
- python爬虫难度排行榜_无聊写了一个python爬虫程序,用来爬夕阳试炼场排行榜的...
- android 资源文件
- ab st语言编程手册,PLC编程语言,ST语言秒杀梯形图编程之浮点数计算
- 关于Android 启动页加载先预加载系统白页问题
- Prometheus踩坑记
- 骆昊python100天 github_GitHub - Greatandy/Python-100-Days: Python - 100天从新手到大师
- 【安安教具】-【数学】-【一阶线性齐次方程】模拟器 教你如何用python制作一阶线性齐次方程模拟器 python项目小发明
- html制作心形状图片,把多张图片拼接成一个爱心的形状 爱心形状的图片效果 爱心拼接照...
- 人工智能:第十一章 自然语言理解
- 微机原理与接口技术复习笔记(1)——微型计算机概述
- python爬取《春风十里不如你》分析
- LowRankGAN
热门文章
- 教你一招:Word中的文字转换成表格,把表格转换成文字
- ns3 学习资料和方法
- apache 在windows下无法启动的一个错误
- 用于图像降噪的卷积自编码器
- 固态硬盘为啥这么快?带你了解固态硬盘的“秘密”……
- java计算机毕业设计即时高校信息发布系统源码+mysql数据库+系统+lw文档+部署
- MySQL生成36位、32位UUID以及32位大写的UUID
- Go组队学习 9.异常处理
- 配置 Cobertura 过滤掉无需测试代码
- 18项政策奖励助力武汉加快区域金融中心建设,申报奖励以及申报流程汇总