在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图片压缩总结 总 结来看,图片有三种存在形式:硬盘上时是file,网络传输时是stream,内存中是stream或bitmap,所谓的质量压缩,它其实只能
综上所述,"android 图片压缩 demo"项目主要涉及到Android平台上的图片压缩技术,包括调整图片尺寸、计算合适的缩放比例、选择合适的图像配置以及控制压缩质量。这些技术对于优化应用性能,尤其是减少内存占用和提高...
总结来说,Android图片质量压缩涉及到了图片的加载、压缩、保存以及上传等多个环节。开发者可以根据实际需求,灵活运用各种工具和方法来实现高效且节省资源的图片处理。在处理大量图片时,合理使用缓存和第三方库...
在Android开发中,图片处理是...总之,理解并掌握Android图片压缩的技巧对于提升应用性能和用户体验至关重要。通过实践`BitmapCompressDemo`,开发者不仅可以深入理解各种压缩方法,还能学会如何在实际项目中有效应用。
这篇博客“android图片压缩的完整的解决方案”提供了详细的源码解析和实用工具,旨在帮助开发者高效地解决这一问题。 首先,我们来探讨一下Android中图片压缩的基本原理。Android提供了多种API来处理图像,例如...
本资源提供了一个基于Eclipse的Android图片压缩的Demo,通过分析和实践这个Demo,开发者可以了解并掌握Android图片压缩的基本原理和技术。 首先,我们来看图片压缩的基本方法。Android提供了多种图片处理库,如...
本压缩包"Android图片压缩结合多种压缩方式.zip"提供了一种综合解决方案,它结合了尺寸压缩、质量压缩以及JNI(Java Native Interface)调用libjpeg库进行的压缩,旨在在保证图片清晰度的同时,将图片内存大小控制在...
综上所述,Android图片压缩解决方案涉及多个层次和方法,开发者需要根据应用的实际需求和性能要求,选择合适的策略和工具,以确保图片加载的高效性和稳定性,避免ANR的发生。同时,持续关注和学习新的库和技术,也是...
这个"android图片压缩的处理.zip"文件很可能是包含了一些示例代码或库,用于帮助开发者了解和实现Android平台上的图片压缩技术。下面将详细讨论Android图片压缩的基本原理、常用方法以及可能涉及到的技术点。 1. **...
Luban(鲁班)——Android图片压缩工具,仿微信朋友圈压缩策略。项目描述目前做app开发总绕不开图片这个元素。但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题。单纯对图片进行裁切,压缩已经有很多...
总结来说,“android图片压缩终极方案”是一个利用NDK和JPEG库哈夫曼算法的高效图片压缩解决方案,旨在在不牺牲图像质量的前提下,最小化文件大小。对于需要处理大量图片或对性能有严格要求的Android应用来说,这样...
"Android图片压缩尽量不失真100k左右.rar"这个压缩包文件可能包含了实现这一目标的源代码示例。在安卓应用中,图片的压缩是一个关键环节,尤其是当需要保持图片质量的同时减小文件大小,以适应网络传输或存储空间的...
在Android开发中,图片压缩是一项常见的任务,尤其在移动设备上,为了节省存储空间和提高应用性能,高效压缩图片而不失真是必要的。本篇文章将详细总结Android中实现这一目标的方法和策略。 首先,理解图片压缩的...
标题提到的"Android图片压缩",通常涉及到以下几个关键技术点: 1. **图片格式理解**:JPEG、PNG等常见图片格式的压缩原理,以及它们在内存和存储空间上的差异。例如,JPEG采用有损压缩,适合连续色调的图像;而PNG...
Luban是一个轻量级的图片压缩库,它能根据屏幕尺寸自动选择合适的压缩比例,并支持自定义压缩质量,简化了图片压缩的流程。 二、图片上传 1. HttpURLConnection或OkHttp: Android上传图片最常用的方式是使用...
总结来说,Android图片压缩是提升应用性能和用户体验的重要手段。通过调整图片尺寸、位深和使用高效的压缩算法,可以有效减小图片大小,同时保证视觉效果。在实际开发中,应结合各种策略,确保图片压缩既高效又灵活...
在Android开发中,图片压缩是一项重要的技术,尤其在资源有限的移动设备上,处理大尺寸、高分辨率的图片时,可能会导致内存溢出或者应用运行缓慢。本篇将深入探讨"android经典图片压缩算法 - 永不失真"这一主题,...
压缩,图片压缩,压缩Bitmap,Compress,CompressImage,CompressFile,CompressBitmap 主要通过尺寸压缩和质量压缩,以达到清晰度最优,该项目参考了 https://github.com/zetbaitsu/Compressor 的部分代码,且在基础上...
《Android图片压缩技术:LuBan鲁班库的深度解析与应用》 在移动开发领域,尤其是在Android平台上,图片处理是一项必不可少的技术。面对用户上传的高分辨率照片,如何在保证显示效果的同时,有效压缩图片大小,减少...