android 比较靠谱的图片压缩

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

第一:我们先看下质量压缩方法:

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);//压缩好比例大小后再进行质量压缩  
}  

转载于:https://my.oschina.net/yongqingfan/blog/737256

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用公差配合表图_ER弹簧夹头配套BT刀柄常用规格型号表

ER弹簧夹头具有定心精度高&#xff0c;夹紧力均匀的特点&#xff0c;广泛用于机械类零件的精加工和半精加工&#xff0c;通常与BT刀柄匹配使用。BT刀柄是是机械主轴与刀具和其它附件工具连接件&#xff0c;BT为日本标准(MAS403)&#xff0c;现在也是普遍使用的一种标准。传统刀…

Linux下python安装升级详细步骤 | Python2 升级 Python3

Linux下python升级步骤 Python2 ->Python3 多数情况下&#xff0c;系统自动的Python版本是2.x 或者yum直接安装的也是2.x 但是&#xff0c;现在多数情况下建议使用3.x 那么如何升级呢&#xff1f; 下面老徐详细讲解升级步骤&#xff1b; 首先下载源tar包 可利用linux自带下…

华为手机连电脑_手机、电脑无网高速互传!华为神技逆天

Huawei Share是华为的一项自研多终端传输技术&#xff0c;可以在没有网络状态下实现手机与手机、电脑等多终端设备间快速稳定的文件分享&#xff0c;尤其是在办公场景下&#xff0c;可以极大提升办公效率。华为表示&#xff0c;未来Huawei Share将应用于更多全场景跨设备无缝分…

excel统计行数_值得收藏的6个Excel函数公式(有讲解)

收藏的Excel函数大全公式再多&#xff0c;几天不用也会忘记。怎么才能不忘&#xff1f;你需要了解公式的运行原理。小编今天不再推送一大堆函数公式&#xff0c;而是根据提问最多的问题&#xff0c;精选出6个实用的&#xff0c;然后详细的解释给大家。1、计算两个时间差TEXT(B2…

Studio One正版多少钱 Studio One正版怎么购买

随着版权意识的增强&#xff0c;打击盗版的力度越来越大&#xff0c;现在网络上的盗版资源越来越少&#xff0c;资源少很难找是一方面&#xff0c;另一方面使用盗版软件不仅很多功能不能使用&#xff0c;而且很多盗版软件都被植入各种木马病毒&#xff0c;从而带来各种各样的风…

DNS简述

常见DNS记录SOA&#xff1a;域权威开始NS&#xff1a;权威域名服务器A&#xff1a;主机地址CNAME&#xff1a;别名对应的正规名称MX&#xff1a;邮件传递服务器PTR&#xff1a;域名指针 (用于反向 DNS)查询过程浏览器缓存->hosts->LDNS->LDNS缓存->ISP->ISP缓存…

cuda gpu相关汇总

1.Ubuntu16.04:在anaconda下安装pytorch-gpu 转自&#xff1a;Ubuntu16.04:在anaconda下安装pytorch-gpu_莫等闲996的博客-CSDN博客 1 创建虚拟环境并进入 conda create -n pytorch-gpu python3.6 conda activate pytorch-gpu 2 下载对应的安装包和配件 方法一(推荐)&#…

普通人学python有意义吗_学python难吗

首先&#xff0c;对于初学者来说学习Python是不错的选择&#xff0c;一方面Python语言的语法比较简单易学&#xff0c;另一方面Python的实验环境也比较容易搭建。学习Python需要的时间取决于三方面因素。(推荐学习&#xff1a;Python视频教程)其一是学习者是否具有一定的计算机…

在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure

【题外话】 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio&#xff08;NTVS&#xff09;&#xff0c;其提供了非常方便的开发和调试功能&#xff0c;当然很多情况下由于平台限制等原因需要在其他机器上运行程序&#xff0c;进而需要远程调试功能&#xff0c…

服务器定期监控数据_基础设施硬件监控探索与实践

本文选自 《交易技术前沿》总第三十六期文章(2019年9月)陈靖宇深圳证券交易所 系统运行部Email: jingyuchenszse.cn摘要&#xff1a;为了应对基础设施规模不断上升&#xff0c;数据中心两地三中心带来的运维挑战&#xff0c;深交所结合现有基础设施现状&#xff0c;以通用性、灵…

VS2010问题汇总

问题1&#xff1a;error C3872: "0xa0": 此字符不允许在标识符中使用 error C3872: "0xa0": 此字符不允许在标识符中使用 或者 error C3872: 0xa0: this character is not allowed in an identifier 解法&#xff1a;这是因为直接复制代码的问题。0xa0是…

vue如何获取年月日_好程序员web前端教程分享Vue相关面试题

好程序员web前端教程分享Vue相关面试题&#xff0c;Vue是一套构建用户界面的渐进式框架&#xff0c;具有简单易用、性能好、前后端分离等优势&#xff0c;是web前端工程师工作的好帮手&#xff0c;也是企业选拔人才时考察的重点技能。接下来好程序员web前端教程资源就给大家分享…

react dispatch_React系列自定义Hooks很简单

React系列-Mixin、HOC、Render Props(上)React系列-轻松学会Hooks(中)React系列-自定义Hooks很简单(下)我们在第二篇文章中介绍了一些常用的hooks&#xff0c;接着我们继续来介绍剩下的hooks吧useReducer 作为useState 的替代方案。它接收一个形如(state, action) > newStat…

前端 保存后端传来数据的id_一篇来自前端同学对后端接口的吐槽

前言去年的某个时候就想写一篇关于接口的吐槽&#xff0c;当时后端提出了接口方案对于我来说调用起来非常难受&#xff0c;但又说不上为什么&#xff0c;没有论点论据所以也就作罢。最近因为写全栈的缘故&#xff0c;团队内部也遇到了一些关于接口设计的问题&#xff0c;于是开…

2018-2019-1 《信息安全系统设计基础》教学进程

《信息安全系统设计基础》教学进程 目录 考核方式暑假准备教学进程 第01周学习任务和要求第02周学习任务和要求第03周学习任务和要求第04周学习任务和要求第05周学习任务和要求第06周学习任务和要求第07周学习任务和要求第08周学习任务和要求第09周学习任务和要求第10周学习任务…

Android中的数据库

2019独角兽企业重金招聘Python工程师标准>>> 1.1. 什么时候使用数据库 有大量相似结构的数据需要存储的时候就可以使用数据库。 1.2. SQLite的简介 SQLite是一款轻量级的数据库。它的设计目标是嵌入式的&#xff0c;而且目前已经在很多嵌入式产品中使用了它。Androi…

python计算绩效工资_python实现 --工资管理系统

原博文 2017-07-25 22:41 − # -*- coding: utf-8 -*- __author__ hjianli # import re import os info_message """Alex 100000 Rain 80000 Egon 50000 Yuan 30000 """ #序列字典 xulie_...01669 相关推荐 2019-09-28 21:13 − Python python…

为Windows Server 2012 R2指定授权服务器

为Windows Server 2012 R2指定授权服务器在Windows Server 2008 R2的终端服务中&#xff0c;可以手动指定授权服务器&#xff0c;而在Windows Server 2012 R2中&#xff0c;默认只能通过"远程桌面连接服务"管理器&#xff0c;指定授权服务器&#xff0c;而要使用远程…

spring5高级编程_Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新

简介是什么让java世界变得更好&#xff0c;程序员变得更友爱&#xff0c;秃头率变得不是那么的高&#xff0c;让程序员不必再每天996&#xff0c;有时间找个女朋友&#xff1f;是Spring。是什么让企业级java应用变得简单易懂&#xff0c;降低了java程序员的进入门槛&#xff0c…

关于resolve非泛型方法不能与类型实参一起使用

今天mvc新建三层时&#xff0c;写到bll层中一直报下面的错误&#xff0c;检查了几遍赶脚并没有什么错。最后发现缺少一些引用。 如下面的图&#xff0c;少添加了下面的两个引用.Unity是微软模式与实践团队开发的一个轻量级、可扩展的依赖注入容器, Microsoft.Practices.Unity.C…