最近,做到电子照片上传的功能,要求照片大小不能大于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%可靠相关推荐

  1. 快速批量压缩照片到指定大小工具,照片图片批量压缩实现方法,批量压缩工具

    在工作中,会遇到在某些系统要上传照片,但是对于上传的照片大小有限制,比如限制大小不能超过1MB等,而外业拍摄的照片往往会超过限制的大小,那么这时就需要对照片进行压缩.但是外业照片数据巨大,人工逐张操作 ...

  2. Thumbnails压缩图片到指定大小

    网上看了很多demo,很多都是照搬别人的代码,不管有没有问题,有的甚至递归不关流,还有的递归疯狂往自己磁盘写文件,递归一次写一次,我自己把网上的demo整理改了下发出来. /** * @Descrip ...

  3. JPG图片怎么压缩到30k内?如何压缩图片到指定大小?

    现在各大网站对上传使用的图片都有大小的限制,有时我们在上传图片的时候会遇到图片要求要在30k以内的情况,在遇到这种情况的时候大家就可以使用在线照片处理器 (https://www.yasuotu.co ...

  4. 格式工厂怎样压缩视频到指定大小,如何设置参数?

    第一种方法格式工厂压缩: 压缩在参数主要设置值,中默认的设置参数.这个值可以质量越好,文件大小越大,一般取值为之间.压缩后的视频容量视原视频的编码格式会有差异,可以压缩到方便了传输. 第二种方法51视 ...

  5. 如何压缩图片到500KB?怎么压缩图片到指定大小?

    如何压缩图片到500KB?这就需要用到压缩啦的图片压缩指定大小工具,只需三步就可以轻松压缩图片大小kb,具体操作步骤如下: 1.使用浏览器打开压缩啦,选择图片压缩指定大小功能. 2.上传需要压缩的图片 ...

  6. linux 压缩固定大小,tar gz压缩文件为指定大小

    tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个 ...

  7. java 压缩图片至指定大小

    需求: 压缩图片至300k以下 一开始没有思路在网上搜,发现google有个插件叫Thumbnails,然后看到了这篇文章: https://blog.csdn.net/u010355502/arti ...

  8. python——实现压缩图片至指定大小

    一.问题描述 遇到了一次那种要求上传图片,图片大小要在1M以内的,一开始尝试用python的cv2来resize实现,后来没成功,百度发现可以用以下方法实现. 二.代码如下 import os fro ...

  9. Android学习之压缩图片到指定大小

    关于图片压缩,是为了上传服务器时有些地方有大小限制,因此,这里我总结了两种方法,个人感觉方法一比较准确一点. 方法一: * 图片压缩方法一* * 计算 bitmap大小,如果超过64kb,则进行压缩* ...

最新文章

  1. Matlab之switch-case语句
  2. 【若依(ruoyi)】菜单操作SQL
  3. js(Dom+Bom)第五天(1)
  4. 最优化5-8章重点(考试点全)
  5. leetcode46. 全排列(回溯)
  6. 154. Find Minimum in Rotated Sorted Array II
  7. Linux---主机字节序与网络字节序
  8. dialog问题记录
  9. python爬虫难度排行榜_无聊写了一个python爬虫程序,用来爬夕阳试炼场排行榜的...
  10. android 资源文件
  11. ab st语言编程手册,PLC编程语言,ST语言秒杀梯形图编程之浮点数计算
  12. 关于Android 启动页加载先预加载系统白页问题
  13. Prometheus踩坑记
  14. 骆昊python100天 github_GitHub - Greatandy/Python-100-Days: Python - 100天从新手到大师
  15. 【安安教具】-【数学】-【一阶线性齐次方程】模拟器 教你如何用python制作一阶线性齐次方程模拟器 python项目小发明
  16. html制作心形状图片,把多张图片拼接成一个爱心的形状 爱心形状的图片效果 爱心拼接照...
  17. 人工智能:第十一章 自然语言理解
  18. 微机原理与接口技术复习笔记(1)——微型计算机概述
  19. python爬取《春风十里不如你》分析
  20. LowRankGAN

热门文章

  1. 教你一招:Word中的文字转换成表格,把表格转换成文字
  2. ns3 学习资料和方法
  3. apache 在windows下无法启动的一个错误
  4. 用于图像降噪的卷积自编码器
  5. 固态硬盘为啥这么快?带你了解固态硬盘的“秘密”……
  6. java计算机毕业设计即时高校信息发布系统源码+mysql数据库+系统+lw文档+部署
  7. MySQL生成36位、32位UUID以及32位大写的UUID
  8. Go组队学习 9.异常处理
  9. 配置 Cobertura 过滤掉无需测试代码
  10. 18项政策奖励助力武汉加快区域金融中心建设,申报奖励以及申报流程汇总