android压缩图片质量,Android 图片质量压缩有关问题

Android 图片质量压缩问题

本帖最后由 u013064347 于 2014-01-13 10:22:47 编辑

网上看到一个图片质量压缩法,传入1M以内图片能正常压缩,但是传入2M多的图片就报内存溢出,应该怎么解决?附上代码

Bitmap images=BitmapFactory.decodeFile(filePath);//这里传入图片会报内存溢出!

public Bitmap compressImage(Bitmap image) {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

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

int options = 90;

int longs=baos.toByteArray().length;

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

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

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

longs=baos.toByteArray().length;

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

}

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

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

return bitmap;

}

分享到:

更多

------解决方案--------------------

// 取得图片

InputStream temp = this.getAssets().open(path);

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

// 这个参数代表,不为bitmap分配内存空间,只记录一些该图片的信息(例如图片大小),说白了就是为了内存优化

options.inJustDecodeBounds = true;

// 通过创建图片的方式,取得options的内容(这里就是利用了java的地址传递来赋值)

BitmapFactory.decodeStream(temp, null, options);

// 关闭流

temp.close();

// 生成压缩的图片

int i = 0;

Bitmap bitmap = null;

while (true) {

// 这一步是根据要设置的大小,使宽和高都能满足

if ((options.outWidth >> i <= size)

&& (options.outHeight >> i <= size)) {

// 重新取得流,注意:这里一定要再次加载,不能二次使用之前的流!

temp = this.getAssets().open(path);

// 这个参数表示 新生成的图片为原始图片的几分之一。

options.inSampleSize = (int) Math.pow(2.0D, i);

// 这里之前设置为了true,所以要改为false,否则就创建不出图片

options.inJustDecodeBounds = false;

bitmap = BitmapFactory.decodeStream(temp, null, options);

break;

}

i += 1;

}

return bitmap;

------解决方案--------------------

http://bbs.csdn.net/topics/390432950

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

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

相关文章

python标准库os_Python基础--人们一些最爱的标准库(sys os fileinput)

这篇博客就介绍介绍常见的、人们钟爱的python中的标准库。 sys 从字面上也能看出来&#xff0c;是system的缩写。这个模块能够访问与python解析器紧密联系的变量和函数。 argv 命令行参数 exit 退出当前程序 modules 映射模块名到载入模块的字典 path 目录 platform 平台标识符…

android区域截图app,【干货】最新App应用市场截图尺寸大全

今天给大家分享最新的干货&#xff0c;刚好碰上这段时间设计市场截图&#xff0c;所以给各位设计新人&#xff0c;分享本人整合的尺寸大全&#xff0c;希望对你们的设计之路有所帮助。一、IOS App Store尺寸尺寸(机型) 大小(px)3.5寸(iphone4/4s)…

python如何运行一个python程序_在python中,如何运行一个命令行程序,它在发送Ctrl+D之前不会返回...

由于没有人提供任何代码来帮助解决这个问题&#xff0c;我将做如下的事情。结果发现pexpect非常强大&#xff0c;而且您不需要signal模块。在import os import sys import pexpect def run_server(): server_dir /path/to/server/root current_dir os.path.abspath(os.curdir…

android app外唤起,Android 唤起app的多种方式

方式一(通过Intent唤起)&#xff1a;我们自己的app代码&#xff1a;ComponentName componetName new ComponentName("com.lh.jimtrency.webviewdemo","com.lh.jimtrency.webviewdemo.MainActivity");//(另外一个应用程序的包名&#xff0c;要启动的Activi…

2018python做图形界面哪个库简单_2018年常见的python编程开发库都有哪些类型

python编程开发可以说是目前比较热门的一项编程开发语言了&#xff0c;而今天我们就一起来了解一下&#xff0c;关于python编程都有哪些常见的python库可以使用。1、TensorFlow “TensorFlow是一个使用数据流图进行数值计算的开源软件库。图形节点表示数学运算&#xff0c;而图…

android条形图,MPAndroid组条形图未显示

这个问题已经在这里有了答案&#xff1a;????????????>????????????How to check if activity is in foreground or in visible background?????????????????????????????????????22个这是我用于使用MPAndroi…

c++ socket线程池_java 网络编程,Socket编程

Java的网络编程主要涉及到的内容是Socket编程&#xff0c;那么什么是Socket呢&#xff1f;简单地说&#xff0c;Socket&#xff0c;套接字&#xff0c;就是两台主机之间逻辑连接的端点。TPC/IP协议是传输层协议&#xff0c;主要解决数据如何在网络中传输&#xff0c;而HTTP是应…

android签名忘记密码,修改Android签名证书keystore的密码、别名alias以及别名密码

之前在测试Eclipse ADT的Custom debug Eclipse ADT的Custom debug keystore所需证书规格&#xff0c;提到过自定义调试证书的密码和1. 首先当然是先复制一份正式证书出来作为要修改为的临时调试证书。2. 修改keystore密码的命令(keytool为JDK带的命令行工具)&#xff1a;keytoo…

python列表转换成数字_Python中列表元素转为数字的方法分析

本文实例讲述了Python中列表元素转为数字的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 有一个数字字符的列表&#xff1a; numbers [1, 5, 10, 8] 想要把每个元素转换为数字&#xff1a; numbers [1, 5, 10, 8] 用一个循环来解决&#xff1a; new_numbers …

android 绘图软件,安卓最强大的绘图软件 妙笔生花最新评测

妙笔生花——绘画体验(一)看过使用教程之后&#xff0c;就能进入到真正的功能页面了。功能页面的首页只有一个按钮&#xff0c;点击页面下端的这个按钮之后&#xff0c;就能跳出功能强大的工具选择页面。【妙笔生花】——工具选择页OK&#xff0c;接下来&#xff0c;小编会使用…

识别物体是否存在_【科学实践Vol.1】带你玩转“人脸识别”

随着时代的发展&#xff0c;人脸识别在我们的生活中变得随处可见&#xff1a;商场里的人脸识别储物柜&#xff0c;校园里的人脸识别刷卡机&#xff0c;手机里的面部解锁……这些应用极大的便利了我们的日常生活。今天&#xff0c;就让我们一起走进人脸识别的原理世界。首先我们…

html 自动适应手机屏幕大小,HTML5 canvas自适应手机屏幕大小的一种解决方案

一、最终效果为了不浪费大家时间&#xff0c;先展示最终效果&#xff0c;看看是不是大家需要的解决方案&#xff1a;标准分辨率&#xff1a;其他分辨率的适配情况&#xff1a;二、需求1.canvas的内容能全部展示在屏幕上2.尽量能保证图像不变形3.绘制的文字也能自适应三、解决方…

编写一个能够排序的函数模板。_LeetCode刷题——9.给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合...

难度(medium)题目描述&#xff1a;给出n对括号&#xff0c;请编写一个函数来生成所有的由n对括号组成的合法组合。例如n3&#xff0c;解集为&#xff1a; "((()))", "(()())", "(())()", "()(())", "()()()" 思路&#xf…

html5怎么产生手风琴效果,Html5 js如何实现手风琴效果

Html5 js如何实现手风琴效果发布时间&#xff1a;2020-08-03 09:54:10来源&#xff1a;亿速云阅读&#xff1a;92作者&#xff1a;小猪这篇文章主要为大家展示了Html5 js如何实现手风琴效果&#xff0c;内容简而易懂&#xff0c;希望大家可以学习一下&#xff0c;学习完之后肯定…

c++进制转换_一文了解进制之间的原理和转换

点击这段文字&#xff1a; 获取2020年&#xff0c;最强Python学习资料进制这块&#xff0c;可以做简单的了解。生活中我们使用的数字都是十进制的&#xff0c;而二进制是机器能够识别的最直接的语言。但是二进制又太大&#xff0c;记录起来非常的不方便。所以通常会将二进制转化…

用HTML做一个简单的web登录页面,简单的JavaWeb注册登录案例

简单的JavaWeb注册登录案例1.注册页面register.htmlregister姓名&#xff1a;电话&#xff1a;邮箱&#xff1a;qq&#xff1a;2.注册案例实现程序register.java/*** 注册案例实现程序* author lucky**/public class register extends HttpServlet {public void doGet(HttpServ…

一层循环时间复杂度_算法的时间与空间复杂度(一看就懂)

算法&#xff08;Algorithm&#xff09;是指用来操作数据、解决程序问题的一组方法。对于同一个问题&#xff0c;使用不同的算法&#xff0c;也许最终得到的结果是一样的&#xff0c;但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢&…

用ajax替换html代码,替换Ajax响应一个div的内部HTML(Replace inner HTML of a div w

我试图一些时间间隔后改变一个div的内部HTML。 我得到我想要使用Ajax正确的反应。 但无法取代内HTML的后&#xff0c;并用Ajax响应地选择。 什么是错我的代码..HTML51 seconds ago58 seconds ago.....10 minute agoĴ查询setInterval(function() {$( ".time" ).each(…

java 审批流_一文读懂工作流

网上关于工作流引擎有比较多的简介&#xff0c;也有很多工作流的实际应用场景。本文结合笔者多年对工作流的经验来阐述一下对工作流的理解。一、什么是工作流&#xff1f;先贴上wiki百科对于工作流的定义工作流&#xff08;Workflow&#xff09;&#xff0c;是对工作流程及其各…

html制作卡通图案代码,CSS画的卡通动画图案

CSS语言&#xff1a;CSSSCSS确定* {padding: 0;margin: 0;}body {background: #26ad00;}.head {background: #ff8cb2;width: 70vw;height: 50vw;position: absolute;top: calc(50% - 25vw);left: calc(50% - 35vw);z-index: 2;border-radius: 90% 90% 80% 80% / 120% 120% 60% …