`
xiaoboss
  • 浏览: 648198 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android 图片压缩也即生成缩略图方法

 
阅读更多

在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。

  然而,如果我们想取固定大小的缩略图就比较困难了,比如,我们想将不同大小的图片去出来的缩略图高度都为200px,而且要保证图片不失真,那怎么办?我们总不能将原始图片加载到内存中再进行缩放处理吧,要知道在移动开发中,内存是相当宝贵的,而且一张100K的图片,加载完所占用的内存何止 100K?

  经过研究,发现,Options中有个属性inJustDecodeBounds,研究了一下,终于明白是什么意思了,SDK中的E文是这么说的

  If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels.

  意思就是说如果该值设为true那么将不返回实际的bitmap不给其分配内存空间而里面只包括一些解码边界信息即图片大小信息,那么相应的方法也就出来了,通过设置inJustDecodeBounds为true,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0,必须做判断。
具体代码如下:
FrameLayout fr=(FrameLayout)findViewById(R.id.FrameLayout01);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        // 获取这个图片的宽和高
        Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.jpg", options); //此时返回bm为空
        options.inJustDecodeBounds = false;
         //计算缩放比
        int be = (int)(options.outHeight / (float)200);
        if (be <= 0)
            be = 1;
        options.inSampleSize = be;
        //重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦
        bitmap=BitmapFactory.decodeFile("/sdcard/test.jpg",options);
        int w = bitmap.getWidth();
        int h = bitmap.getHeight();
        System.out.println(w+"   "+h);
        ImageView iv=new ImageView(this);
        iv.setImageBitmap(bitmap);

这样我们就可以读取较大的图片而不会内存溢出了。如果你想把压缩后的图片保存在Sdcard上的话就很简单了:
File file=new File("/sdcard/feng.png");
        try {
            FileOutputStream out=new FileOutputStream(file);
            if(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();
        }
ok,这样就把图片保存在/sdcard/feng.png这个文件里面了,呵呵。

分享到:
评论

相关推荐

    Android中一个关于图片上传和缩略图查看的Demo

    2. 缩略图的生成可以通过Bitmap.createScaledBitmap方法实现,根据需要的大小比例来裁剪或缩放原图。 3. 考虑到性能优化,通常会先加载较小的缩略图,然后在用户需要时再加载原图,这种策略被称为懒加载。 4. 在...

    Android图片压缩(质量压缩和尺寸压缩)

    质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成缩略图。 两种方法都实装在了我的项目中,结果却发现在质量压缩的模块中,本来1.9M的...

    android 浏览缩略图的功能 .zip

    Android提供了`ThumbnailUtils`类,它提供了一些静态方法用于生成缩略图。其中`createThumbnail`方法可以直接从文件路径或`InputStream`生成缩略图,非常方便。通过设置目标宽度和高度,`ThumbnailUtils`会根据比例...

    朋友圈发布动态(拍照、图库选择、照片压缩、显示、保存、缩略图、点击缩略图删除对应文件等)

    在微信朋友圈发布动态的过程中,涉及到一系列的技术点,包括图片拍摄、图库选择、照片压缩、显示、保存、生成缩略图以及相应的用户交互功能。以下将详细解释这些关键环节: 1. **拍照与图库选择**: - 拍照功能:...

    Android 布局生成微信分享图片

    // 设置缩略图 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = mediaMessage; req.scene = SendMessageToWX.Req.WXSceneTimeline; // 分享...

    缩略图显示

    Android还提供了一个叫做`BitmapFactory`的类,它包含了一些处理位图的方法,比如`decodeStream()`、`decodeFile()`等,可以用来从文件流或者文件路径中加载图片,并且可以通过`Options`参数来指定加载的位图大小,...

    多美女图片缩略图

    生成缩略图的方法包括简单地按比例缩小图片,或者使用插值算法保持清晰度。在编程中,我们可以使用各种库(如Python的PIL、Java的ImageIO、JavaScript的sharp等)来实现这一功能。 3. **前端展示**:在网页设计中,...

    视频录制压缩成缩略图

    - `Bitmap.createScaledBitmap()`方法用于根据需要调整图像尺寸,减少内存占用,适合生成缩略图。 5. **文件操作**: - `java.io.File`类用于创建、读取、删除文件。在Android中,需要考虑到存储权限和外部存储的...

    Android图片缩放方法

    ### Android图片缩放方法详解 在Android开发过程中,图片处理是一项常见的需求,特别是在图片浏览器、社交媒体应用或任何涉及大量图像展示的场景下。对于优化用户体验和系统资源利用,有效地缩放图片至关重要。本文...

    Android中3种图片压缩处理方法

    本文将详细介绍三种常见的Android图片压缩处理方法:质量压缩、获取缩略图以及图片缩放,并提供相应的示例代码。 1. **质量压缩方法** 质量压缩是通过调整图片的压缩比例来减小文件大小。在Android中,我们可以...

    Android中图片压缩方案详解.doc

    采样率压缩法的优点在于可以显著减小内存占用,尤其适合于生成缩略图或处理大图。缺点是可能会导致图片质量损失,特别是在大幅度压缩时。 总结来说,Android中图片压缩可以根据具体需求选择合适的方法。质量压缩...

    使用Async-Http实现图片压缩上传

    接收图片文件后,服务器通常会将其保存到特定的目录,并可能进行额外的处理,如验证文件类型、检查文件大小、生成缩略图等。在Java中,可以使用Servlet或Spring MVC框架来处理HTTP请求,从Request对象中获取上传的...

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

    - **加载缩略图**:使用`decodeStream`或`decodeResource`方法时,配合`BitmapFactory.Options`,可以指定仅解码图片的一部分,或者按比例生成缩略图,避免加载完整的大图。 - **及时回收**:在不再使用Bitmap对象...

    android图片转换成数据流的形式保存

    在提供的代码片段中,有一个`scaleBitmap()`方法可以用来生成缩略图: ```java public static Bitmap scaleBitmap(String src, int max) { BitmapFactory.Options options = new BitmapFactory.Options(); ...

    android 仿系统图片库 带缓存版

    这种机制通常包括图片的缩略图生成、按需加载、缓存管理和内存优化等组件。开发者通过模仿这套机制,可以在自己的应用中实现类似的功能,提高图片加载的效率和用户体验。 LruCache是Android提供的一种内存缓存机制...

    Android整理好的图片压缩工具类

    【Android图片压缩】在Android开发中,由于设备内存有限,特别是在处理大图片时,需要进行图片压缩以防止出现内存溢出(Out Of Memory,简称OOM)的问题。Android提供了多种图片压缩策略,包括使用系统自带的缩略图...

    android 加载大图片Demo

    3. 缩略图:对于需要展示但不需要原图质量的场景,可以生成并存储缩略图,以减少内存消耗。 四、内存缓存与磁盘缓存 1. LRU Cache:利用LRU(Least Recently Used)算法实现内存缓存,当内存不足时,会优先移除...

    Thumbnailator图片压缩Demo以及jar包

    它提供了一种简单易用的方式来生成和操作图像的缩略图,包括等比例缩放、裁剪、旋转等多种功能。在这个"Thumbnailator图片压缩Demo以及jar包"中,包含的主要内容是thumbnailator-0.4.8.jar库文件和一个示例代码...

    安卓拍照上传录像监控录屏相关-简单的实现了视频下载并且压缩成缩略图。.rar

    可以利用这个特性获取视频的关键帧,然后使用Bitmap类的compress方法将其压缩为缩略图。为了优化性能和节省存储空间,可以调整压缩格式(如JPEG)和质量参数。 3. 缩略图生成:除了MediaMetadataRetriever,还可以...

Global site tag (gtag.js) - Google Analytics