Android的图片压缩类ThumbnailUtils

一.

主要是通过BitmapFactory.Options来实现。

Options中有个属性inJustDecodeBounds。我们可以充分利用它,来避免大图片的溢出问题。他是什么原理呢?

API这样说:如果该 值设为true那么将不返回实际的bitmap,也不给其分配内存空间这样就避免内存溢出了。但是允许我们查询图片的信息这其中就包括图片大小信息(

options.outHeight (图片原始高度)和option.outWidth(图片原始宽度))。

Options中有个属性inSampleSize我们可以充分利用它,实现缩放。

如果被设置为一个值>1,要求解码器解码出原始图像的一个子样本,返回一个较小的bitmap,以节省存储空间。

例如,inSampleSize == 2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4

对于任何值< =1的同样处置为1。

那么相应的方法也就出来了,通过设置 inJustDecodeBoundstrue,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值)

然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0,必须做判断。


实现步骤:

第一步:BitmapFactory.Option

设置 inJustDecodeBoundstrue

第二步:BitmapFactory.decodeFile(path,option)方法

解码图片路径为一个位图。如果指定的文件名是空的,或者不能解码到一个位图,函数将返回null[空值]。

获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度)

第三步:计算缩放比例,也可以不计算,直接给它设定一个值。

options.inSampleSize= "你的缩放倍数";

如果是2就是高度和宽度都是原始的一半。

第四步:设置options.inJustDecodeBounds= false;

重新读出图片

bitmap =BitmapFactory.decodeFile(path, options);



[java]   viewplain copy print ?
  1. package com.tracyZhang.media;  
  2.   
  3. import android.app.Activity;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.BitmapFactory;  
  6. import android.os.Bundle;  
  7. import android.widget.ImageView;  
  8. import android.widget.LinearLayout.LayoutParams;  
  9.   
  10. public class ImageCompressActivity extends Activity  
  11.       
  12.       
  13.     ImageView image;  
  14.       
  15.     public void onCreate(Bundle savedInstanceState)  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.main);  
  18.         image (ImageView) findViewById(R.id.image);  
  19.         image.setImageBitmap(decodeBitmap());  
  20.      
  21.   
  22.     public Bitmap decodeBitmap()  
  23.      
  24.         BitmapFactory.Options options new BitmapFactory.Options();  
  25.         options.inJustDecodeBounds true 
  26.         // 获取图片的宽和高  
  27.         Bitmap bitmap BitmapFactory.decodeFile("/sdcard/xx.png"options);  
  28.         float realWidth options.outWidth;  
  29.         float realHeight options.outHeight;  
  30.         System.out.println("真实图片高度:" realHeight "宽度:" realWidth);  
  31.         // 缩放比  
  32.         int scale (int((realHeight realWidth realHeight realWidth) 300);  
  33.         if (scale <= 0 
  34.          
  35.             scale 1 
  36.          
  37.         options.inSampleSize scale;  
  38.         options.inJustDecodeBounds false 
  39.         // 注意这次要把options.inJustDecodeBounds 设为 false,这次图片是要读取出来的。  
  40.         bitmap BitmapFactory.decodeFile("/sdcard/xx.png"options);  
  41.         int bitmap.getWidth();  
  42.         int bitmap.getHeight();  
  43.         System.out.println("缩略图高度:" "宽度:" w);  
  44.         image.setLayoutParams(new LayoutParams(w, h));  
  45.         return bitmap;  
  46.      
  47.  

这样我们就可以读取较大的图片而不会内存溢出了。

 



 

二.

Android2.2开始系统新增了一个缩略图ThumbnailUtils类,位于framework的android.media.ThumbnailUtils位置,可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图,该类提供了三种静态方法可以直接调用获取。

1、 static Bitmap createVideoThumbnail(String filePath, int kind) //获取视频文件的缩略图,第一个参数为视频文件的位置,比如/sdcard/android123.3gp,而第二个参数可以为MINI_KIND或MICRO_KIND最终和分辨率有关 

2、 static Bitmap extractThumbnail(Bitmap source, int width, int height, intoptions) //直接对Bitmap进行缩略操作,最后一个参数定义为OPTIONS_RECYCLE_INPUT,来回收资源

3、 static Bitmap extractThumbnail(Bitmap source, int width, int height) //这个和上面的方法一样,无options选项,最后提醒大家,ThumbnailUtils类是APILevel从8或更高才开始支持的。

 

[java]   viewplain copy print ?
  1. Bitmap bm  
  2.         ThumbnailUtils tu new ThumbnailUtils();  
  3.         int 400 
  4.         int 300 
  5. //      bm tu.createVideoThumbnail("sdcard/3.3gp",Thumbnails.MICRO_KIND);  
  6.         bm tu.extractThumbnail(BitmapFactory.decodeFile("sdcard/3.jpg"), w, h);  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android图片压缩工具是一种用于压缩Android应用中的图片文件的工具。根据引用和引用的内容,这个工具的具体实现可能包括以下功能: - 通过将图片文件转换为字节数组,以便进行后续的压缩处理。 - 使用缓冲输出流将压缩后的图片数据写入输出流中。 - 通过设置合适的压缩参数,对图片进行压缩操作,减小文件大小但尽量保持良好的图像质量。 - 可能还包括一些其他的图像处理操作,如旋转、裁剪等。 具体的实现细节可以参考引用和引用提供的代码示例。在这些示例中,使用了ByteArrayInputStream和ByteArrayOutputStream来处理字节数组的输入和输出。通过设置合适的压缩参数,可以实现对图片的压缩操作。此外,还可以使用BufferedOutputStream来提高输出流的写入性能。 如果想要进一步了解关于Android图片压缩工具的使用和实现细节,可以参考引用提供的配套资料,该资料可能提供了更详细的解释和示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Android开发之图片压缩工具完整实例](https://download.csdn.net/download/weixin_38517904/14018839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [android图片压缩工具分享](https://download.csdn.net/download/weixin_38616330/14881444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Spring Boot(六十四):SpringBoot集成Gzip压缩数据](https://download.csdn.net/download/u013938578/88221156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值