`
fackyou200
  • 浏览: 309742 次
  • 性别: Icon_minigender_1
  • 来自: 山西太原
社区版块
存档分类
最新评论

android下图片压缩

 
阅读更多

第一:我们先看下质量压缩方法:

    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  
                image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中  
                options -= 10;//每次都减少10  
            }  
            ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中  
            Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片  
            return bitmap;  
        }  

 第二:图片按比例大小压缩方法(根据路径获取图片并压缩):

    private Bitmap getimage(String srcPath) {  
            BitmapFactory.Options newOpts = new BitmapFactory.Options();  
            //开始读入图片,此时把options.inJustDecodeBounds 设回true了  
            newOpts.inJustDecodeBounds = true;  
            Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空  
              
            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;//设置缩放比例  
            //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了  
            bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  
            return compressImage(bitmap);//压缩好比例大小后再进行质量压缩  
        }  

 第三:图片按比例大小压缩方法(根据Bitmap图片压缩):

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

 

分享到:
评论

相关推荐

    android jpeg图片压缩

    android jpeg图片压缩

    android 图片压缩 demo

    本教程将探讨如何在Android中实现图片的压缩,特别是在一个名为"picture-compress-m552-master"的项目中,该项目提供了高度自定义的图片压缩功能,能够将图片压缩至200h*200w的尺寸。 首先,我们要了解Android中...

    Android资源图片压缩工具

    Android资源图片压缩工具 可以减小apk包的体积 批文件已经写好 将图片拖动到Drag PNG here to reduce palette to 256,这个是我感觉比较好的 批文件大家可以按需求写

    Android 图片压缩Demo

    在Android开发中,图片处理是...总之,理解并掌握Android图片压缩的技巧对于提升应用性能和用户体验至关重要。通过实践`BitmapCompressDemo`,开发者不仅可以深入理解各种压缩方法,还能学会如何在实际项目中有效应用。

    Android基于JNI压缩图片高效不失真

    总结,基于JNI的图片压缩方法结合了Java的易用性和C/C++的高性能,为Android应用提供了高效不失真的图片压缩解决方案。同时,开发者也可以根据实际需求选择不同的图像处理库,如OpenCV、libjpeg等,来优化压缩算法。

    Android图片质量压缩

    总结来说,Android图片质量压缩涉及到了图片的加载、压缩、保存以及上传等多个环节。开发者可以根据实际需求,灵活运用各种工具和方法来实现高效且节省资源的图片处理。在处理大量图片时,合理使用缓存和第三方库...

    Android图片压缩源代码

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

    Android图片压缩结合多种压缩方式.zip

    本压缩包"Android图片压缩结合多种压缩方式.zip"提供了一种综合解决方案,它结合了尺寸压缩、质量压缩以及JNI(Java Native Interface)调用libjpeg库进行的压缩,旨在在保证图片清晰度的同时,将图片内存大小控制在...

    android开发图片压缩

    本教程将详细介绍如何在Android中实现图片压缩以及旋转相机拍摄图片的角度。 一、图片压缩 1. **选择压缩库**:在Android开发中,有许多优秀的开源库可以帮助我们进行图片压缩,如 Glide、Picasso 和 Fresco。这些...

    android 图片压缩处理

    android 照片获取 压缩存储代码 经过实际项目测试相当稳定

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

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

    Android图片压缩示例

    综上所述,Android图片压缩涉及到图像处理的基本概念、Bitmap对象的操作、文件I/O以及用户界面的交互等多个方面。理解并熟练掌握这些知识点,可以帮助开发者有效地优化应用的性能,提供更好的用户体验。

    android 图片无损压缩

    在Android开发中,图片处理是一项重要的任务,尤其是在内存管理和用户体验方面。"android 图片无损压缩"是...Luban库的出现,标志着Android图片处理技术的进一步成熟,对于提升用户体验和优化应用性能有着显著的作用。

    android图片压缩的处理.zip

    这个"android图片压缩的处理.zip"文件很可能是包含了一些示例代码或库,用于帮助开发者了解和实现Android平台上的图片压缩技术。下面将详细讨论Android图片压缩的基本原理、常用方法以及可能涉及到的技术点。 1. **...

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

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

    Android下的图片压缩及图片和视频的上传

    本文将深入探讨Android环境下如何实现图片压缩以及如何将压缩后的图片和视频上传到服务器。 一、图片压缩 1. 图片压缩原理: 图片压缩的基本思路是减少图片的数据量,而不会显著降低其视觉质量。这通常通过降低...

    Android压缩图片,图片质量不变

    总结,Android图片压缩的关键在于找到合适的压缩算法、压缩质量与文件大小之间的平衡。在不改变图片质量的前提下压缩图片,需要尝试不同的压缩策略,如调整JPEG或PNG的压缩质量,或者利用第三方库提供的高级功能。...

    Android高效压缩图片不失真的方法总结

    在Android开发中,图片压缩是一项常见的任务,尤其在移动设备上,为了节省存储空间和提高应用性能,高效压缩图片而不失真是必要的。本篇文章将详细总结Android中实现这一目标的方法和策略。 首先,理解图片压缩的...

    android经典图片压缩算法 永不失真

    在Android开发中,图片压缩是一项重要的技术,尤其在资源有限的移动设备上,处理大尺寸、高分辨率的图片时,可能会导致内存溢出或者应用运行缓慢。本篇将深入探讨"android经典图片压缩算法 - 永不失真"这一主题,...

    android哈希曼图片压缩支持armeabi-v7a

    在Android平台上,图片压缩是一个常见的需求,特别是在移动设备资源有限的情况下。哈希曼(Huffman)编码是一种数据压缩方法,通常用于JPEG图像压缩。这里提到的"android哈希曼图片压缩支持armeabi-v7a"是指在...

Global site tag (gtag.js) - Google Analytics