`

android bitmap压缩

阅读更多
	/**
	 * bitmap转为base64
	 * 
	 * @param bitmap
	 * @return
	 */
	public static String bitmapToBase64(Bitmap bitmap) {
		String result = null;
		ByteArrayOutputStream baos = null;
		try {
			if (bitmap != null) {
				baos = new ByteArrayOutputStream();
				bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);

				baos.flush();
				baos.close();

				byte[] bitmapBytes = baos.toByteArray();
				result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (baos != null) {
					baos.flush();
					baos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	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;//设置缩放比例
        newOpts.inPreferredConfig = Config.RGB_565;//降低图片从ARGB888到RGB565
        //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
        isBm = new ByteArrayInputStream(baos.toByteArray());
        bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
        return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
    }
	
	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
            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;
    }

 

分享到:
评论

相关推荐

    Android bitmap图片压缩工具类

    `compressBitmapToStream(Bitmap bitmap, OutputStream stream)`方法可以将Bitmap压缩后写入OutputStream,避免一次性加载整个图片到内存。 6. **优化缓存策略**: 在Android应用中,内存缓存和磁盘缓存是必不可少...

    Android Bitmap压缩方式分析

    Android Bitmap压缩方式分析 在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以...

    Android Bitmap压缩方法的选择详解

    本篇文章将深入探讨Android Bitmap的压缩方法,特别是如何选择合适的压缩策略以适应不同的场景需求,特别是在处理分享到社交平台如微信时的32KB大小限制。 首先,我们来看一下问题的背景:在测试过程中,发现将文章...

    详解Android Bitmap的常用压缩方式

    Bitmap 压缩方式详解 ...在 Android 中,Bitmap 压缩是非常重要的,因为它直接影响到 app 运行时的内存。通过选择合适的压缩方式和格式,可以有效地减少 Bitmap 所占用的内存大小,提高 app 的性能。

    android Bitmap相关知识介绍~~~

    Android Bitmap 相关知识介绍 Android 中的 Bitmap 是一种特殊的类,它不能被直接创建,而只能通过 BitmapFactory 来获取。BitmapFactory 提供了多种方法来从不同的图像来源中获取 Bitmap,下面是其中的一些: 1. ...

    Android Bitmap 处理示例

    在Android开发中,Bitmap是用于表示图像数据的核心类,它在UI显示和图像处理中扮演着重要角色。然而,由于Bitmap对象通常占用大量的内存,不当的处理可能导致内存溢出(Out Of Memory)问题,因此对Bitmap进行高效...

    android bitmap图片压缩

    在TestCompressBitmap项目中,你可以找到更多关于Bitmap压缩的实践案例,包括不同方法的比较,以及在实际应用中的性能优化策略。通过这些示例,你可以更好地理解如何根据应用场景选择合适的压缩策略,确保图片质量与...

    Android图片压缩方法并压缩到指定大小

    本文将详细介绍两种主要的Android图片压缩方法:质量压缩和按比例大小压缩,并提供相应的代码实现。 **一、图片质量压缩** 质量压缩主要是通过调整图片的压缩率来降低图片的大小。在Android中,我们可以使用`...

    Android bitmap

    使用`compress()`方法将Bitmap压缩为指定格式(如JPEG)并设置质量,然后写入流: ```java File fImage = new File("/sdcard/dcim", "beijing.jpeg"); FileOutputStream iStream = new FileOutputStream(fImage);...

    Android bitmap工具类

    在Android开发中,Bitmap是用于处理图像的基本类,它提供了对像素级别的操作。BitmapUtils工具类是为了方便开发者在处理图片时进行各种操作,比如转换、压缩、存储等。本篇文章将详细探讨`Android bitmap工具类`,...

    android bitmap outOfMemory解决方法

    在Android开发中,Bitmap对象是用于处理图像的主要类,但如果不正确管理,它可能导致应用程序运行时出现`OutOfMemoryError`。这是因为Bitmap占用大量的内存,尤其是当加载大尺寸或高分辨率图片时。这个问题在低内存...

    Android中把bitmap存成BMP格式图片的方法

    在Android开发中,有时我们需要将Bitmap对象转换成不同的图片格式,比如BMP。BMP(Bitmap File Format)是一种常见的位图文件格式,但它并不像JPEG或PNG那样被Android SDK直接支持。本文将详细介绍如何在Android中将...

    Android开发、Bitmap 压缩相关操作、文件压缩、文件处理、图片处理、字符串处理等处理工具类

    Android开发、Bitmap 压缩相关操作(计算图片的压缩比率 计算图片的压缩比率 从Resources中加载图片 通过传入的bitmap,进行压缩,得到符合标准的bitmap 从SD卡上加载图片 删除临时图片)、文件压缩(压缩成文件 ...

    Bitmap压缩原理和理论分析.jpg

    1:介绍图片耗用内存资源原理,以及计算图片内存方法 2:Bitmap压缩图片基本手段和思路

    Android-CompressHelper压缩文件压缩图片压缩Bitmap

    3. **Bitmap压缩(CompressBitmap)**:Bitmap是Android中用于处理图像的基本类,但其内存占用较高。`CompressHelper`提供了压缩Bitmap的方法,这在处理大量图片或者内存受限的设备上非常有用。它可以调整Bitmap的...

    ANDROIDBITMAP内存限制OOM,OUTOFMEMORY.pdf

    文档标题和描述中提到的“ANDROIDBITMAP内存限制OOM,OUTOFMEMORY”指的就是在处理位图(BITMAP)时超出了虚拟机(VM)的内存预算,导致系统抛出OutOfMemoryError异常。 根据给出的内容部分,我们可以推断出以下知识...

    Android将bitmap保存到本地png/jpg格式等

    在Android开发中,Bitmap是用于处理图像的基本类,它代表了一个位图图像。有时我们需要将Bitmap对象保存到本地,例如用户拍摄的照片或者加载的网络图片,以便后续使用或分享。本篇文章将深入探讨如何在Android中将...

    bitmap上传图片demo

    可以使用`Bitmap.compress(Bitmap.CompressFormat, quality, stream)`方法将Bitmap压缩为JPEG或PNG格式的流。 总结,"bitmap上传图片demo"是一个综合性的实例,涵盖了Bitmap的加载、显示、裁剪和上传等多个环节,...

Global site tag (gtag.js) - Google Analytics