`
yangwei0915
  • 浏览: 465282 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

android 图片压缩避免内存溢出的解决办法

 
阅读更多

在android中的很多应用中都需要拍照上传图片,随着手机的像素越来越高,拍摄的图片也越来越大。在拍摄后显示的时候,使用universalimageloader.这个开源项目可以避免内存溢出。但是在上传的时候,一般需要压缩,但是压缩的时候很容易导致内存溢出。解决的办法就是,压缩后的二进制流,不用导出Bitmap,而是直接存储为本地文件,上传的时候直接通过本地文件上传。代码如下:

1.图片压缩获取输入流

/**
	 * 压缩图片获取输入流
	 * @param image
	 * @return
	 */
	public static InputStream compressImage3(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
			options -= 10;// 每次都减少10
			image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中

		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中
		//Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片
		//return bitmap;
		return isBm;
	}
	

 2.将输入流写入文件,代码如下:

InputStream in=ImageLoadUtil.compressImage3(bitmap);
		
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		try {
			FileOutputStream out = new FileOutputStream(file);
			byte[] buf=new byte[64];
			int len;
			while((len=in.read(buf))>-1){
				out.write(buf, 0, len);
			}
			//bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
			out.flush();
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 

分享到:
评论

相关推荐

    android解决加载图片内存溢出

    通过以上策略,我们可以显著优化Android应用中的图片加载,避免内存溢出问题,同时提升用户体验。实际开发中,应根据项目需求和性能要求,灵活选择和组合这些技术。在提供的"PhotoWallFallsDemo"示例中,可能就包含...

    android 图片下载 有效解决内存溢出问题

    本文将深入探讨如何有效地下载和处理图片,以避免内存溢出问题。 首先,我们需要理解Android内存管理机制。每个Android应用都有一个独立的Dalvik虚拟机实例,分配一定的内存空间。当加载大图或大量小图时,如果超过...

    图片过大引起的内存溢出解决方案

    通过这种方式可以获取到图片的大小信息,然后根据需要调整图片的尺寸,避免内存溢出。 2. **使用inSampleSize属性进行下采样**:在`BitmapFactory.Options`中设置`inSampleSize`属性为大于1的整数,表示对原图进行...

    针对Android应用中Gallery内存溢出的解决方案.pdf

    然而,随着应用程序功能的日益丰富,尤其是涉及到图像处理的应用,如何有效管理内存资源,避免内存溢出(Out Of Memory,简称OOM)成为了亟待解决的问题。在Android应用中,Gallery(画廊)组件被广泛用于展示和浏览...

    Android图片压缩解决方案,解决图片加载过程中ANR现象

    综上所述,Android图片压缩解决方案涉及多个层次和方法,开发者需要根据应用的实际需求和性能要求,选择合适的策略和工具,以确保图片加载的高效性和稳定性,避免ANR的发生。同时,持续关注和学习新的库和技术,也是...

    安卓图片压缩类,避免内存溢出OOM

    总的来说,安卓图片压缩的核心目标是合理控制图片的内存占用,避免一次性加载过大图片导致的内存溢出。通过选择合适的压缩方法和库,结合内存管理和异步加载策略,可以有效地解决这个问题,实现更流畅、更节省资源的...

    android图片压缩的完整的解决方案

    这篇博客“android图片压缩的完整的解决方案”提供了详细的源码解析和实用工具,旨在帮助开发者高效地解决这一问题。 首先,我们来探讨一下Android中图片压缩的基本原理。Android提供了多种API来处理图像,例如...

    图片压缩节约内存

    标题"图片压缩节约内存"直接指向了这个核心目标:通过压缩图片来减少应用程序对内存的占用,从而提高性能并避免内存溢出的问题。这在处理大量图片,如在ListView中异步加载时尤其关键。 首先,我们要理解图片的存储...

    android图片瀑布流优化版,防止内存溢出

    综上所述,这个优化版的Android图片瀑布流解决方案综合运用了多种技术手段,以防止内存溢出,提升应用的稳定性和性能。开发者在实现自己的瀑布流布局时,可以参考这些优化策略,为用户提供流畅且高效的图片浏览体验...

    Android 图片压缩不OOM,超高保真度

    通过分析和学习这个示例,开发者可以更好地理解和掌握Android图片压缩的技巧,以达到在不引发OOM的前提下,保持图片的高保真度。 总结来说,处理Android中的大图,我们需要合理地使用`BitmapFactory.Options`进行...

    加载大图片的时候如何防止内存溢出

    为了解决这个问题,我们需要了解 Android 加载大图片的机制,并掌握一些防止内存溢出的技巧。 首先,我们需要了解 Android 加载图片的机制。在 Android 中,加载图片可以使用多种方法,如 setImageBitmap、...

    gallery加载大量图片时内存溢出的解决方法(一)

    本文将详细介绍如何解决在gallery中加载大量图片导致的内存溢出问题。 首先,我们需要理解Android的内存管理机制。Android系统使用Dalvik或ART虚拟机运行应用程序,它们都有内存限制。当加载大图或大量图片时,如果...

    Android图片压缩源代码

    本资源提供了一个基于Eclipse的Android图片压缩的Demo,通过分析和实践这个Demo,开发者可以了解并掌握Android图片压缩的基本原理和技术。 首先,我们来看图片压缩的基本方法。Android提供了多种图片处理库,如...

    android图片压缩的处理.zip

    它们能自动处理图片大小,避免内存溢出,并且支持动态调整图片大小和质量。 7. **压缩算法**: 对于有损压缩,JPEG使用DCT(离散余弦变换);对于无损压缩,PNG采用色块压缩。开发者还可以自定义压缩算法,例如...

    Android 内存溢出的一些解决办法.doc

    本文将详细探讨几种解决Android内存溢出的方法。 首先,针对图像导致的内存溢出,一种常见的解决方案是使用`BitmapFactory.Options`类进行图片解码时的尺寸控制。例如,在创建`Bitmap`对象时,可以设置`...

    ListView异步加载图片和文字,避免内存溢出和滑动效率

    本篇文章将深入探讨如何在ListView中实现图片和文字的异步加载,以优化性能,避免内存溢出,并提高滑动效率。 一、内存溢出与滑动效率问题 1. 内存溢出:当应用程序请求的内存超过系统分配的最大值时,就会发生内存...

    Android图片质量压缩

    3. **避免内存溢出**: 大图片直接加载到内存可能导致`OutOfMemoryError`。为了避免这种情况,可以使用上述的`inSampleSize`来预加载缩放后的图片,或者使用`Bitmap.createScaledBitmap()`来动态调整Bitmap的尺寸。...

    android 解决ViewPager加载大量图片内存溢出问题

    在Android开发中,ViewPager是一个非常常用的组件...通过以上方法,可以有效地解决ViewPager加载大量图片导致的内存溢出问题,同时提高应用的性能和用户体验。在实际开发中,应结合项目的具体需求选择适合的优化策略。

Global site tag (gtag.js) - Google Analytics