android文件图片压缩
‘壹’ Android黑科技,图片终极压缩
一、支持自定义配置、不失真和批量处理
二、图片上传为什么要压缩
1、图片服务器空间限制,磁盘昂贵
2、网络不稳定,大文件需要断点续传
3、尽可能避免安卓OOM异常
4、后台约定的规则<200KB
5、需要上传原图的应用有医院临床项目、金融银行
三、图片压缩流程
1、递归每张图片
2、设置图片格式 Bitmap.CompressFormat.JPG
png, jpg,webp
3、质量压缩bitmap.compress(format,quality,baos)
由于png是无损压缩,所以设置quality无效(不适合作为缩略图)
采样率压缩BitmapFactory.Options.inSampleSize
缩小图片分辨率,减少所占用磁盘空间和内存大小
缩放压缩canvas.drawBitmap(bitmap, null,rectF,null)
减少图片的像素,降低所占用磁盘空间大小和内存大小,可用于缓存缩略图
JNI调用JPEG库
Android的图片引擎使用的是阉割版的skia引擎,去掉了图片压缩中的哈夫曼算法
4、像素修复
5、返回压缩
6、完成压缩
demo: https://github.com/ApeCold/Learn_Compress_Sample
参考:
Luban框架 https://github.com/Curzibn/Luban
缺点
1、当没有设定压缩路径时,抛异常无闪退
2、源码中,压缩比率固定值60,无法修改
3、压缩配置,参数不太适应真实项目需求
4、不能指定压缩大小,比如100KB以内
https://github.com/zettsu/Compressor
‘贰’ 说说在 Android 中如何压缩图片
1:ByteArrayOutputStream 压缩图片质量,不会改变图片大小
java">privateBitmapcompressImage(Bitmapimage){
ByteArrayOutputStreambaos=newByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
intoptions=100;while(baos.toByteArray().length/1024>100){//循环判断如果压缩后图片是否大于100kb,大于继续压缩
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG,options,baos);//这里压缩options%,把压缩后的数据存放到baos中
options-=10;//每次都减少10}
ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
Bitmapbitmap=BitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream数据生成图片
returnbitmap;
}
2:就是改变图片大小
privateBitmapgetimage(StringsrcPath){
BitmapFactory.OptionsnewOpts=newBitmapFactory.Options();//开始读入图片,此时把options.inJustDecodeBounds设回true了
newOpts.inJustDecodeBounds=true;
Bitmapbitmap=BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空
newOpts.inJustDecodeBounds=false;intw=newOpts.outWidth;inth=newOpts.outHeight;//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
floathh=800f;//这里设置高度为800f
floatww=480f;//这里设置宽度为480f//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
intbe=1;//be=1表示不缩放
if(w>h&&w>ww){//如果宽度大的话根据宽度固定大小缩放
be=(int)(newOpts.outWidth/ww);
}elseif(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);returncompressImage(bitmap);//压缩好比例大小后再进行质量压缩}
‘叁’ 说说在 Android 中如何压缩图片
目前存在两种压缩图片方式:
而图片有三种存在形式:
bigmap 在内存中的大小是按像素计算的,也就是width * height,所以如果需要在 Android 中显示照片,那么就必须进行按比例压缩,避免因为内存消耗过大,导致 APP 退出。
是不是很简单呀 O(∩_∩)O哈哈~
‘肆’ 怎么把手机照片压缩成文件
一、安卓手机步骤如下:
1、进入文件管理模式:选择手机文件管理图标进入文件管理模式。
2、选择图片:在文件管理中选择自己想要发送或压缩的图片,点击复制。
3、建立文件夹:点击你需要储存图片的位置新建文件夹,输入文件夹的名称完成后保存。
4、移动或拷贝照片到文件夹:找到并点击打开新建的文件夹,把照片粘贴进该文件夹。
5、制作压缩包:选择带有照片的文件夹,选取压缩功能把文件夹做成压缩文件,输入文件名完成文件压缩。
6、照片发送:选择做好的压缩文件包,在弹出的对话框里找到分享图标,选择分享。选取自己喜欢的方式,比如微信、QQ、邮件等等,按各自的方式分享即可。
二、苹果手机步骤如下:
1、下载并安装具有压缩功能的APP,比如“压缩专家”。
2、打开安装的APP,选择导入相片选项进入手机相册。
3、选择需要发送的照片或视频后点压缩并输入压缩文件名。
4、压缩完成后点击压缩包后选择分享即可。
5、选择分享方式,选取自己喜欢的方式,比如微信、QQ、邮箱等等。
6、按选取的方式发送。
三、把手机里的照片传到电脑就更方便了,步骤如下:
1、建立新文件夹把手机照片拷贝到该文件夹。
2、鼠标右键选中新文件夹,选择添加到压缩文件(A),确定后输入文件名制作压缩文件包。
3、打开邮件或微信、QQ,按不同的方式发送,邮件一般以附件的形式发送,微信和QQ可以直接作为文件发送。
‘伍’ 可以自定义大小和像素来进行图片压缩的Android压缩库
老规矩 先上依赖
Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.asnhkl1:X-CompressImage:1.0.1'
}
背景:
对于一些需要对图片进行定制化压缩的场景,如必须图片必须多少多少K以下,或者分辨率有要求的场景。开发此库。
你可以这样用:
CompressConfig 为建造模式去设置参数
CompressConfig compressConfig = CompressConfig.builder()
.setUnCompressMinPixel(1000) // 最小像素不压缩,默认值:1000
.setUnCompressNormalPixel(2000) // 标准像素不压缩,默认值:2000
.setMaxPixel(1200) // 长或宽不超过的最大像素 (单位px),默认值:1200
.setMaxSize(200 * 1024) // 压缩到的最大大小 (单位B),默认值:200 * 1024 = 200KB
.enablePixelCompress(true) // 是否启用像素压缩,默认值:true
.enableQualityCompress(true) // 是否启用质量压缩,默认值:true
.enableReserveRaw(false) // 是否保留源文件,默认值:true
.setCacheDir(path) // 压缩后缓存图片路径,默认值:Constants.COMPRESS_CACHE
.setShowCompressDialog(true) // 是否显示压缩进度条,默认值:false
.create();
如果你仅仅只是压缩图片 我们给有默认的参数使用getDefaultConfig()
this.unCompressMinPixel =1000;
this.unCompressNormalPixel =2000;
this.maxPixel =1200;
this.maxSize =204800;
this.enablePixelCompress =true;
this.enableQualityCompress =true;
this.enableReserveRaw =true;
下边就是使用了 。很简单 ,传参加回调
CompressImageManager.build(this,compressConfig, photos, new CompressImage.CompressListener() {
@Override
public void onCompressSuccess(ArrayList<Photo> var1) {
Log.i("imageCompress","success");
//do what you want to do
}
@Override
public void onCompressFailed(ArrayList<Photo> var1, String var2) {
Log.e("imageCompress","false",null);
}
}).compress();
git 地址:https://github.com/asnhkl1/X-CompressImage
欢迎指教,互相学习
‘陆’ android 图片压缩
在文件管理里面长按图片会出现设置面板,选中压缩图片即可以。
‘柒’ android中压缩图片的几种方法比较
图片有三种存在形式:硬盘上时是file,网络传输时是stream,内存中是stream或bitmap,所谓的质量压缩,它其实只能实现对 file的影响,你可以把一个file转成bitmap再转成file,或者直接将一个bitmap转成file时,这个最终的file是被压缩过的,但 是中间的bitmap并没有被压缩(或者说几乎没有被压缩,我不确定),因为bigmap在内存中的大小是按像素计算的,也就是width * height,对于质量压缩,并不会改变图片的像素,所以就算质量被压缩了,但是bitmap在内存的占有率还是没变小,但你做成file时,它确实变小 了;
而尺寸压缩由于是减小了图片的像素,所以它直接对bitmap产生了影响,当然最终的file也是相对的变小了;
‘捌’ 手机怎么压缩图片
软件版本: 文件管理
手机: 华为P30
系统:安卓9.1
1、在手机桌面上找到,并点击进入“文件管理”。
‘玖’ Android 图片选择(ImageSelector) (拍照,裁剪,压缩,查看)
1.遍历sdcard文件夹(指定层次深度 searchDeep ),如果文件夹发现图片 , 添加到已搜索到图片的文件列表中,并跳入下一个文件夹搜索
2.使用 ContentResolver 搜索 添加搜索标签(png,jpg,jpeg,gif 等) 优点:更快速
压缩调用
第一步-->
采样率压缩:设置 BitmapFactory.Options.inSampleSize 大小
第二步-->
PNG:尺寸压缩( Config:ARGB_4444 ,工具: Canvas );
JPG:尺寸压缩( Config:ARGB_565 ,工具: Canvas )+压缩质量( bitmap.compress() )
注 :
1.GIF不做压缩处理
2.尺寸压缩:改变宽高(png,jpg)
3.压缩质量:改变文件大小(适用jpg,png无效)
‘拾’ 怎样在安卓系统上压缩图片大小
安卓系统是手机系统,我们很少在手机上进行压缩,有的手机是有压缩功能的,想小米,oppo类的手机上有这种功能,压缩效果并不乐观,电脑上执行压缩小编例举了一下步骤:
a、打开任意浏览器,点击浏览器的搜索框,在这里搜索图片压缩,选择网页搜索,我们要找到下载工具的网页,将工具下载安装到我们的电脑。
其实图片文件压缩是一个简单的过程,但是我们要找对图片文件压缩的软件,进行图片压缩就是一件简单的事情