`
scliu0718
  • 浏览: 51488 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Android图片压缩尺寸及质量

 
阅读更多

在Android开发中为了防止内存溢出,在显示图片时通常都对图片进行不同的压缩,以下就是压缩的代码:

第一步:先通过对图片大小及手机屏幕尺寸的计算得出来的值然后对图片的尺寸进行缩小,在这时尺寸压缩后,

在产生Bitmap时就不会出现OutOfMemoryException异常了。尺寸压缩使用Options的inSampleSize属性

来控制缩放比例。

第二步:压缩图片质量,根据文件大小来判断压缩程度。

public Bitmap createNewBitmapAndCompressByFile(String filePath, int wh[]) {
		int offset = 100;
		File file = new File(filePath);
		long fileSize = file.length();
		if (200 * 1024 < fileSize && fileSize <= 1024 * 1024)
			offset = 90;
		else if (1024 * 1024 < fileSize)
			offset = 85;

		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inJustDecodeBounds = true; // 为true里只读图片的信息,如果长宽,返回的bitmap为null
		options.inPreferredConfig = Bitmap.Config.ARGB_8888;
		options.inDither = false;
		/**
		 * 计算图片尺寸 //TODO 按比例缩放尺寸
		 */
		BitmapFactory.decodeFile(filePath, options);

		int bmpheight = options.outHeight;
		int bmpWidth = options.outWidth;
		int inSampleSize = bmpheight / wh[1] > bmpWidth / wh[0] ? bmpheight / wh[1] : bmpWidth / wh[0];
		// if(bmpheight / wh[1] < bmpWidth / wh[0]) inSampleSize = inSampleSize * 2 / 3;//TODO 如果图片太宽而高度太小,则压缩比例太大。所以乘以2/3
		if (inSampleSize > 1)
			options.inSampleSize = inSampleSize;// 设置缩放比例
		options.inJustDecodeBounds = false;

		InputStream is = null;
		try {
			is = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			return null;
		}
		Bitmap bitmap = null;
		try {
			bitmap = BitmapFactory.decodeStream(is, null, options);
		} catch (OutOfMemoryError e) {
			
			System.gc();
			bitmap = null;
		}
		if (offset == 100)
			return bitmap;// 缩小质量
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		bitmap.compress(Bitmap.CompressFormat.JPEG, offset, baos);
		byte[] buffer = baos.toByteArray();
		options = null;
		if (buffer.length >= fileSize)
			return bitmap;
		return BitmapFactory.decodeByteArray(buffer, 0, buffer.length);
	}



分享到:
评论

相关推荐

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

    在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:...android图片压缩总结 总 结来看,图片有三种存在形式:硬盘上时是file,网络传输时是stream,内存中是stream或bitmap,所谓的质量压缩,它其实只能

    Android 图片压缩Demo

    使用质量压缩、尺寸压缩、采样率压缩以及转换为RGB565等四种方式压缩图片

    Android 图片压缩之多种压缩结合使用

    首先通过尺寸压缩,压缩到手机常用的一个分辨率(1280*960 微信好像是压缩到这个分辨率),然后我们要把图片压缩到100KB以内,通过质量压缩来计算options需要设置为多少,最后调用JNI压缩,这边我测试了下,压缩出来的...

    Android图片压缩工具Luban(鲁班).zip

    Luban(鲁班)——Android图片压缩工具,仿微信朋友圈压缩策略。项目描述目前做app开发总绕不开图片这个元素。但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题。单纯对图片进行裁切,压缩已经有很多...

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

    Android图片压缩结合多种压缩方式,常用的有尺寸压缩、质量压缩以及通过JNI调用libjpeg库来进行压缩,三种方式结合使用实现指定图片内存大小,清晰度达到最优。

    Android代码-压缩库,主要通过尺寸压缩和质量压缩,以达到清晰度最优

    压缩,图片压缩,压缩Bitmap,Compress,CompressImage,CompressFile,CompressBitmap 主要通过尺寸压缩和质量压缩,以达到清晰度最优,该项目参考了 https://github.com/zetbaitsu/Compressor 的部分代码,且在基础上...

    Android 图片压缩之多种压缩方式结合使用(AS源码)

    Studio源码】首先通过尺寸压缩,压缩到手机常用的一个分辨率(1280*960 微信好像是压缩到这个分辨率),然后我们要把图片压缩到100KB以内,通过质量压缩来计算options需要设置为多少,最后调用JNI压缩,这边我测试了下...

    Android系统图片压缩软件

    Android系统图片压缩软件 主要对图片进行质量压缩和尺寸压缩,附带拍照功能 目前存在缺陷: 1、质量压缩不稳定,压缩一次之后再次质量压缩没有效果 2、保存图片方法中引入了质量参数为90的质量压缩,造成拍摄的...

    图片压缩工具Android-BitherCompress.zip

    Android图片压缩结合多种压缩方式,常用的有尺寸压缩、质量压缩以及通过JNI调用libjpeg库来进行压缩,三种方式结合使用实现指定图片内存大小,清晰度达到最优。使用:导入lib-bither-compress NativeUtil....

    Android性能优化(六)图片压缩

    一、压缩图片 文件压缩——内存压缩 二、文件压缩方式 1.质量压缩  2.尺寸压缩  3.格式选择:JPEG/WEBP (4.0以上) 三、压缩原理 /frameworks/base/core/jni/android/graphics/Bitmap.cpp Skia引擎 ...

    TinyPNG PNG图片压缩利器

    对于颜色繁杂的,比如照片墙纸之类的图片(有些应用的启动画面喜欢搞这种),那用JPG是最好不过了,这种图片压缩前压缩后肉眼分辨几乎不计,如果保存成PNG 体积将是JPG的几倍甚至几十倍,严重浪费体积

    Compressor:android图像压缩库

    Compressor可让您将大照片压缩为较小尺寸的照片,而图像质量的损失则很小或可忽略不计。 Gradle dependencies { implementation ' id.zelory:compressor:3.0.1 ' } 让我们压缩图像尺寸! 压缩图像文件 val ...

    Android Bitmap压缩方式分析

    在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的...

    SiliCompressor:一个功能强大,灵活易用的Android视频和图像压缩库

    图片为我们的Android应用程序增添了风采和美感,但是由于它们的尺寸较大,我们通常会在这些图片上遇到问题。 使用SiliCompressor,您现在可以更流畅地压缩和使用图像。 视频 由于我们的智能手机摄像头和其他设备的...

    H5移动端图片压缩上传开发流程

    接下来总结在h5活动的开发中图片压缩上传的功能,并标记其中踩过的几个坑,分享给大家: 小白区必看 对于移动端图片上传毫无概念的话,需要补充FileReader、Blob、FormData三个概念。 1.FileReader 定义 使用...

    HTML5移动开发图片压缩上传功能

    接下来总结在h5活动的开发中图片压缩上传的功能,并标记其中踩过的几个坑,分享给大家: 小白区必看 对于移动端图片上传毫无概念的话,需要补充FileReader、Blob、FormData三个概念。 1.FileReader 定义 使用...

    Android开发人员不得不收集的代码

    getAndroidID : 获取设备 AndroidID getMacAddress : 获取设备 MAC 地址 getManufacturer : 获取设备厂商 getModel : 获取设备型号 shutdown : 关机 reboot : 重启 reboot2Recovery : 重启到 recovery reboot2...

    安卓app开发中图片的用法,app图片使用细节比你想像得多得多

    在java原生app中放一张图片比你想像得难得多,可不是放一张图片就能搞定的,要考虑手机屏幕分辨率,图片尺寸,压缩等多种情况. 比如: 缩放图片时安卓无法保证图片高质量, 位图使用多少内存 等 我现在一一给你讲解

Global site tag (gtag.js) - Google Analytics