/** * 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; }
相关推荐
`compressBitmapToStream(Bitmap bitmap, OutputStream stream)`方法可以将Bitmap压缩后写入OutputStream,避免一次性加载整个图片到内存。 6. **优化缓存策略**: 在Android应用中,内存缓存和磁盘缓存是必不可少...
Android Bitmap压缩方式分析 在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以...
本篇文章将深入探讨Android Bitmap的压缩方法,特别是如何选择合适的压缩策略以适应不同的场景需求,特别是在处理分享到社交平台如微信时的32KB大小限制。 首先,我们来看一下问题的背景:在测试过程中,发现将文章...
Bitmap 压缩方式详解 ...在 Android 中,Bitmap 压缩是非常重要的,因为它直接影响到 app 运行时的内存。通过选择合适的压缩方式和格式,可以有效地减少 Bitmap 所占用的内存大小,提高 app 的性能。
Android Bitmap 相关知识介绍 Android 中的 Bitmap 是一种特殊的类,它不能被直接创建,而只能通过 BitmapFactory 来获取。BitmapFactory 提供了多种方法来从不同的图像来源中获取 Bitmap,下面是其中的一些: 1. ...
在Android开发中,Bitmap是用于表示图像数据的核心类,它在UI显示和图像处理中扮演着重要角色。然而,由于Bitmap对象通常占用大量的内存,不当的处理可能导致内存溢出(Out Of Memory)问题,因此对Bitmap进行高效...
在TestCompressBitmap项目中,你可以找到更多关于Bitmap压缩的实践案例,包括不同方法的比较,以及在实际应用中的性能优化策略。通过这些示例,你可以更好地理解如何根据应用场景选择合适的压缩策略,确保图片质量与...
本文将详细介绍两种主要的Android图片压缩方法:质量压缩和按比例大小压缩,并提供相应的代码实现。 **一、图片质量压缩** 质量压缩主要是通过调整图片的压缩率来降低图片的大小。在Android中,我们可以使用`...
使用`compress()`方法将Bitmap压缩为指定格式(如JPEG)并设置质量,然后写入流: ```java File fImage = new File("/sdcard/dcim", "beijing.jpeg"); FileOutputStream iStream = new FileOutputStream(fImage);...
在Android开发中,Bitmap是用于处理图像的基本类,它提供了对像素级别的操作。BitmapUtils工具类是为了方便开发者在处理图片时进行各种操作,比如转换、压缩、存储等。本篇文章将详细探讨`Android bitmap工具类`,...
在Android开发中,Bitmap对象是用于处理图像的主要类,但如果不正确管理,它可能导致应用程序运行时出现`OutOfMemoryError`。这是因为Bitmap占用大量的内存,尤其是当加载大尺寸或高分辨率图片时。这个问题在低内存...
在Android开发中,有时我们需要将Bitmap对象转换成不同的图片格式,比如BMP。BMP(Bitmap File Format)是一种常见的位图文件格式,但它并不像JPEG或PNG那样被Android SDK直接支持。本文将详细介绍如何在Android中将...
Android开发、Bitmap 压缩相关操作(计算图片的压缩比率 计算图片的压缩比率 从Resources中加载图片 通过传入的bitmap,进行压缩,得到符合标准的bitmap 从SD卡上加载图片 删除临时图片)、文件压缩(压缩成文件 ...
1:介绍图片耗用内存资源原理,以及计算图片内存方法 2:Bitmap压缩图片基本手段和思路
3. **Bitmap压缩(CompressBitmap)**:Bitmap是Android中用于处理图像的基本类,但其内存占用较高。`CompressHelper`提供了压缩Bitmap的方法,这在处理大量图片或者内存受限的设备上非常有用。它可以调整Bitmap的...
文档标题和描述中提到的“ANDROIDBITMAP内存限制OOM,OUTOFMEMORY”指的就是在处理位图(BITMAP)时超出了虚拟机(VM)的内存预算,导致系统抛出OutOfMemoryError异常。 根据给出的内容部分,我们可以推断出以下知识...
在Android开发中,Bitmap是用于处理图像的基本类,它代表了一个位图图像。有时我们需要将Bitmap对象保存到本地,例如用户拍摄的照片或者加载的网络图片,以便后续使用或分享。本篇文章将深入探讨如何在Android中将...
可以使用`Bitmap.compress(Bitmap.CompressFormat, quality, stream)`方法将Bitmap压缩为JPEG或PNG格式的流。 总结,"bitmap上传图片demo"是一个综合性的实例,涵盖了Bitmap的加载、显示、裁剪和上传等多个环节,...