转自:http://blog.csdn.net/luhuajcdd/article/details/8948261
android bitmap compress
android的照相功能随着手机硬件的发展,变得越来越强大,能够找出很高分辨率的图片。
有些场景中,需要照相并且上传到服务,但是由于图片的大小太大,那么就上传就会很慢(在有些网络情况下),而且很耗流量,要想速度快,那么就需要减小图片的大小。减少图片的大小有两种方法,1. 照小图片; 2. 压缩大图片。 照相时获取小图片一般不太符合要求,因为,图片的清晰度会很差,但是这种情况有个好处就是应用速度会快些; 压缩图片,就是把大图片压缩小,降低图片的质量,在一定范围内,降低图片的大小,并且满足需求(图片仍就清晰)。下面组要是介绍图片的压缩:
1. 照相请查看http://blog.csdn.net/luhuajcdd/article/details/8826587 ->想要保存图片到制定目录,启动Camera应用时,需要指定文件
2. 压缩过程:
2.1 从图片路径中读取图片(图片很大,不能全部加在到内存中处理,要是全部加载到内存中会内存溢出)
- final BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = true;
- BitmapFactory.decodeFile(filePath, options);
- // Calculate inSampleSize
- options.inSampleSize = calculateInSampleSize(options, 480, 800);
- // Decode bitmap with inSampleSize set
- options.inJustDecodeBounds = false;
- Bitmap bm = BitmapFactory.decodeFile(filePath, options);
- int degree = readPictureDegree(filePath);
- bm = rotateBitmap(bm,degree) ;
- private static int readPictureDegree(String path) {
- int degree = 0;
- try {
- ExifInterface exifInterface = new ExifInterface(path);
- int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
- switch (orientation) {
- case ExifInterface.ORIENTATION_ROTATE_90:
- degree = 90;
- break;
- case ExifInterface.ORIENTATION_ROTATE_180:
- degree = 180;
- break;
- case ExifInterface.ORIENTATION_ROTATE_270:
- degree = 270;
- break;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- return degree;
- }
- private static Bitmap rotateBitmap(Bitmap bitmap, int rotate){
- if(bitmap == null)
- return null ;
- int w = bitmap.getWidth();
- int h = bitmap.getHeight();
- // Setting post rotate to 90
- Matrix mtx = new Matrix();
- mtx.postRotate(rotate);
- return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
- }
- bm.compress(Bitmap.CompressFormat.JPEG, 30, baos);//30 是压缩率,表示压缩70%; 如果不压缩是100,表示压缩率为0
完整的方法代码:
- public static Bitmap getSmallBitmap(String filePath) {
- final BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = true;
- BitmapFactory.decodeFile(filePath, options);
- // Calculate inSampleSize
- options.inSampleSize = calculateInSampleSize(options, 480, 800);
- // Decode bitmap with inSampleSize set
- options.inJustDecodeBounds = false;
- Bitmap bm = BitmapFactory.decodeFile(filePath, options);
- if(bm == null){
- return null;
- }
- int degree = readPictureDegree(filePath);
- bm = rotateBitmap(bm,degree) ;
- ByteArrayOutputStream baos = null ;
- try{
- baos = new ByteArrayOutputStream();
- bm.compress(Bitmap.CompressFormat.JPEG, 30, baos);
- }finally{
- try {
- if(baos != null)
- baos.close() ;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return bm ;
- }
- private static int calculateInSampleSize(BitmapFactory.Options options,
- int reqWidth, int reqHeight) {
- // Raw height and width of image
- final int height = options.outHeight;
- final int width = options.outWidth;
- int inSampleSize = 1;
- if (height > reqHeight || width > reqWidth) {
- // Calculate ratios of height and width to requested height and
- // width
- final int heightRatio = Math.round((float) height
- / (float) reqHeight);
- final int widthRatio = Math.round((float) width / (float) reqWidth);
- // Choose the smallest ratio as inSampleSize value, this will
- // guarantee
- // a final image with both dimensions larger than or equal to the
- // requested height and width.
- inSampleSize = heightRatio < widthRatio ? widthRatio : heightRatio;
- }
- return inSampleSize;
- }
相关推荐
在Android开发中,图片压缩是一个常见的需求,特别是在处理用户拍摄的照片或从资源中加载大图时。Bitmap类是Android系统用于处理图像的主要工具,而BitmapFactory则是用来解码图片数据的关键类。本文将深入探讨如何...
4. **图片压缩** - 质量压缩:`Bitmap.CompressFormat.JPEG`或`Bitmap.CompressFormat.PNG`配合`compress()`方法,可以根据质量参数调整压缩级别,减少图片的大小。 - 码率压缩:使用`Bitmap.createBitmap()`的...
在Android开发中,有时我们需要将Bitmap对象转换成不同的图片格式,比如BMP。BMP(Bitmap File Format)是一种常见的位图文件格式,但它并不像JPEG或PNG那样被Android SDK直接支持。本文将详细介绍如何在Android中将...
可以使用`Bitmap.compress(Bitmap.CompressFormat, quality, stream)`方法将Bitmap压缩为JPEG或PNG格式的流。 总结,"bitmap上传图片demo"是一个综合性的实例,涵盖了Bitmap的加载、显示、裁剪和上传等多个环节,...
- **图片压缩**:除了上述的JPEG/PNG压缩,还可以使用WebP等高效格式进行压缩。 - **图片质量检测**:计算图片的像素密度、颜色模式等,评估图片质量。 BitmapUtils工具类是Android开发中不可或缺的一部分,它提高...
本文将详细介绍两种主要的Android图片压缩方法:质量压缩和按比例大小压缩,并提供相应的代码实现。 **一、图片质量压缩** 质量压缩主要是通过调整图片的压缩率来降低图片的大小。在Android中,我们可以使用`...
在Android开发中,我们可以使用多种方法实现图片压缩。例如,使用BitmapFactory的decode方法,配合Options对象的inSampleSize属性,可以设置图片解码时的缩放比例,从而降低图片的分辨率,达到压缩的目的。这种方法...
- `Bitmap.compress()`方法支持多种格式(如JPEG、PNG)的图片压缩,可以通过调整质量参数来控制文件大小。 3. **其他优化策略**: - 使用`BitmapRegionDecoder`类,只解码图片的一部分,适合处理大图。 - 利用...
在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的...
本教程将探讨如何在Android中实现图片的压缩,特别是在一个名为"picture-compress-m552-master"的项目中,该项目提供了高度自定义的图片压缩功能,能够将图片压缩至200h*200w的尺寸。 首先,我们要了解Android中...
1:介绍图片耗用内存资源原理,以及计算图片内存方法 2:Bitmap压缩图片基本手段和思路
在 Android 中,有多种图片压缩格式,包括 ALPHA_8、ARGB_4444、ARGB_8888 和 RGB_565 等。 * ALPHA_8:表示 8 位 Alpha 位图,即透明度占 8 个位,一个像素点占用 1 个字节,它没有颜色,只有透明度。 * ARGB_4444...
2. **图片压缩(CompressImage)**:在Android中,图片通常是应用内存消耗的主要因素。`CompressHelper`提供了对图片进行智能压缩的方法,可以调整图片的分辨率、质量或者使用不同的图像格式(如JPEG、PNG)。它可能...
// 使用Bitmap的compress方法,将Bitmap对象压缩为PNG格式 bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // 关闭输出流 out.close(); ``` 对于jpg格式,只需将CompressFormat参数改为JPEG: ```java //...
在Android中,我们可以使用`Bitmap.compress()`方法,传入`Bitmap.CompressFormat.JPEG`或`Bitmap.CompressFormat.PNG`,并设置一个0到100之间的压缩质量值。值越低,压缩程度越大,文件大小越小,但可能会导致图像...
在Android开发中,图片压缩是一项常见的需求,尤其是在处理用户拍照或从相册选取图片时,为了节省存储空间、提高应用性能以及减少网络传输的数据量,通常需要对图片进行压缩。本资源提供了一个基于Eclipse的Android...
5. **压缩算法**:在Android中,可以使用`Bitmap.compress()`方法实现图片压缩。该方法支持多种格式,如JPEG、PNG等,可以通过调整其第二个参数(质量值)来控制压缩程度,数值越小,质量越低,压缩比例越大。 6. *...
问题的关键在于,微信对于分享的缩略图大小有32KB的限制,而原始的图片压缩代码在图片过大时无法达到预期的压缩效果。 Android Bitmap提供了多种压缩方式,包括质量压缩(Quality Compression)和采样率压缩...
Google推出的WebP格式是一种高效的图片压缩格式,它在保持较好图像质量的同时,文件大小远小于JPEG和PNG。通过`CompressFormat.WEBP`,可以利用其压缩优势。 6. **渐进式加载**: 对于大图,可以使用渐进式加载,...