第一:我们先看下质量压缩方法:
private Bitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options = 100;
while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
options -= 10;//每次都减少10
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
return bitmap;
}
第二:图片按比例大小压缩方法(根据路径获取图片并压缩):
private Bitmap getimage(String srcPath) {
BitmapFactory.Options newOpts = new BitmapFactory.Options();
//开始读入图片,此时把options.inJustDecodeBounds 设回true了
newOpts.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空
newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
float hh = 800f;//这里设置高度为800f
float ww = 480f;//这里设置宽度为480f
//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be = 1;//be=1表示不缩放
if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
be = (int) (newOpts.outWidth / ww);
} else if (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);
return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
}
第三:图片按比例大小压缩方法(根据Bitmap图片压缩):
private Bitmap comp(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
BitmapFactory.Options newOpts = new BitmapFactory.Options();
//开始读入图片,此时把options.inJustDecodeBounds 设回true了
newOpts.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
float hh = 800f;//这里设置高度为800f
float ww = 480f;//这里设置宽度为480f
//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be = 1;//be=1表示不缩放
if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
be = (int) (newOpts.outHeight / hh);
}
if (be <= 0)
be = 1;
newOpts.inSampleSize = be;//设置缩放比例
//重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
isBm = new ByteArrayInputStream(baos.toByteArray());
bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
}
分享到:
相关推荐
7. **数据流处理**:在压缩图片时,理解如何读取和写入数据流是非常重要的。例如,可以将 Bitmap 对象转换为 ByteArrayOutputStream,然后使用相应的压缩算法(如 GZIPOutputStream)进行压缩。 8. **图片压缩库**...
我在CSDN总结的一些比较靠谱的比较靠的4个项目希望能帮到大家。
在进入Android开发的世界之前,首先需要正确地配置Android开发环境。这个过程可能对初学者来说显得有些复杂,但通过以下详尽的步骤,你将能够一步到位地搭建一个可靠的Android开发环境。 一、安装Java Development ...
这是一款业内领先的电脑图片...有视频压缩需要的亲们也可以满足需求哦,那么大家想知道压缩图片用什么软件好用或者还不清楚图片无损压缩软件哪个好吗,威航软件园可以很负责任的告诉大家这绝对是一个非常靠谱的选择。
- `res/`目录:包含应用的资源文件,如布局文件(`activity_main.xml`)、图片等。 - `src/`目录:源代码文件,包括主活动类`MainActivity.java`。 - `libs/`目录(可选):可能包含项目依赖的库文件。 - `build...
在【压缩包子文件的文件名称列表】中,"靠谱助手1.4.1073"很可能是该版本的安装程序,其版本号1.4.1073表示这是靠谱助手的第1073个更新版本,通常意味着软件经过多次迭代和优化,可能包含性能提升、新功能添加或者...
数据标注有哪些平台比较靠谱,数据标注有哪些平台可以学习
【靠谱助手微信版】是一款备受推崇的安卓模拟器软件,专为用户提供在电脑上运行安卓应用程序,特别是微信的便捷方式。这款模拟器在全球范围内享有盛誉,因其稳定性和兼容性而受到广大用户的一致好评。 作为全球最大...
Android使用Zxing库识别多个二维码
面试总结js 靠谱靠谱靠谱.md
"靠谱android模拟器"是专为此目的设计的一款软件,旨在提供一个方便、轻量级且无多余附加软件的环境。这款模拟器的特性包括其易用性、小巧的体积以及对实用性的注重,使得它成为开发人员和普通用户测试应用、玩游戏...
安卓模拟器社区(靠谱社区)是中国最大的安卓模拟器交流论坛,下载靠谱助手安卓模拟器可在PC电脑上极速运行安卓手游和应用。最全手机游戏电脑版攻略心得!
这是一款业内领先的电脑图片...有视频压缩需要的亲们也可以满足需求哦,那么大家想知道压缩图片用什么软件好用或者还不清楚图片无损压缩软件哪个好吗,威航软件园可以很负责任的告诉大家这绝对是一个非常靠谱的选择。
国内比较靠谱的招聘网站 在找工作的过程中,选择合适的招聘网站是非常重要的。以下是国内比较靠谱的招聘网站的概括信息: 1. 智联招聘 长处:行业规模覆盖面大,整体数据量巨大,可以寻找到多种人才。较合适北方...
文华财经指标公式源码WH6指标公式赢顺云短线指标哪个比较靠谱.doc
文华财经期货软件指标公式源码期货指标赢顺云指标短线指标哪个比较靠谱.doc
大甩卖了
靠谱助手安卓PC模拟器
读《马克思靠谱》心得.pdf
比较靠谱的方式就是命令行了 打开终端输入以下命令 adb shell logcat e --print --max-count 20 参数说名 1、e 表示 error级别的log 2、--print 打印到控制台 3、--max-count 表示最多打印log的行数,这样可以...