Android把图片压缩到一定大小并不失真
本文转载只供参考
一.图片压缩方式
/*** 图片按比例大小压缩方法* @param srcPath (根据路径获取图片并压缩)* @return*/ public static 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;// 这里设置高度为800ffloat 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);// 压缩好比例大小后再进行质量压缩 }
/*** 图片按比例大小压缩方法* @param image (根据Bitmap图片压缩)* @return*/ public static Bitmap compressScale(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出if (baos.toByteArray().length / 1024 > 1024) {baos.reset();// 重置baos即清空baosimage.compress(Bitmap.CompressFormat.JPEG, 80, 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;Log.i("", w + "---------------" + h);// 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为// float hh = 800f;// 这里设置高度为800f// float ww = 480f;// 这里设置宽度为480ffloat hh = 512f;float ww = 512f;// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可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; // 设置缩放比例// newOpts.inPreferredConfig = Config.RGB_565;//降低图片从ARGB888到RGB565// 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了isBm = new ByteArrayInputStream(baos.toByteArray());bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩//return bitmap; }
二.图片质量压缩
/*** 质量压缩方法* @param image* @return*/ public static Bitmap compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中int options = 90;while (baos.toByteArray().length / 1024 > 100) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩baos.reset(); // 重置baos即清空baosimage.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; }
Android把图片压缩到一定大小并不失真相关推荐
- Android中图片压缩方案详解
如感觉排版不舒服,可移步至此处查看 图片的展示可以说在我们任何一个应用中都避免不了,可是大量的图片就会出现很多的问题,比如加载大图片或者多图时的OOM问题,可以移步到Android高效加载大图.多图避 ...
- Android LibJpeg图片压缩
Android的图片压缩 Android的图片压缩的几种方式:质量压缩,尺寸压缩,采样率压缩,通过NDK调用libjpeg库进行压缩! 质量压缩 通过设置bitmap options属性,降低图片的质 ...
- 图片大小如何调整到10k?图片压缩到指定大小怎么弄?
在现代社交网络和在线平台上,上传的图片大小都会有限制,过大的图像会导致性能问题.加载时间延长和带宽消耗,所以图片压缩指定大小(https://www.yasuotu.com/imagesize)就成了 ...
- 图片不超过200kb怎么调整?一分钟学会图片压缩到指定大小
很多网站为了保证页面的流畅度会限制图片上传的kb大小,所以我们需要把图片压缩到指定大小(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图),那么有没有比较快捷的方法可以自定义压缩图片大小呢?今天 ...
- iOS图片压缩成指定大小
在iOS中涉及一些图片显示和处理问题,在实际中碰到过修改账户头像时上传头像出现 error = Error Domain=com.alamofire.error.serialization.respo ...
- 照片怎么改到100k?图片压缩到固定大小?
怎么把jpg图片压缩到100k大小,看起来很复杂的问题其实我们可以使用jpg压缩工具--压缩图,利用它的图片压缩到固定大小功能来实现我们的压缩需求,操作十分简单,快来试试看吧. 1.打开电脑浏览器进入 ...
- 图片如何缩小到100k?怎么把图片压缩到指定大小?
有时候在平台上传图片会规定大小100k,图片如何缩小到100k呢?可以使用压缩图的图片压缩到指定大小功能,十分的方便一键操作就可以将图片压缩到100k以内,来看看具体操作步骤吧. 1.打开压缩图点击图 ...
- 如何将图片压缩到指定大小?压缩图片大小的方法
很多报名平台都对图片大小有固定的数值要求,所以不少小伙伴来问,怎么压缩图片200k以下(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)?想要把图片压缩指定大小就要用到一些比较专业的工具,今天 ...
- 怎么把图片压缩到30k以内?如何图片压缩到指定大小?
在公务员考试报名时,需要提交个人证件照片,通常都会要求照片大小不能超过30kb,否则会导致上传失败.那么怎么把图片压缩到30k以内呢?想要把图片压缩到30kb就需要用到压缩图的图片压缩指定大小(图片压 ...
最新文章
- poj 1904 King's Quest
- 帝国cms模板辅助编辑插件lsk_ecms.crx使用说明
- Docker Swarm删除节点
- 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(七)界面安装
- 编写你的第一个 Django 应用,第 3 部分
- java web随机抽取_java实现随机抽取奖品工具类
- OLEDB Excel 与C# 的数据流通方法
- R语言第九讲 验证集法
- 评分预测会不会大于满分5.0的情况?
- 字典生成_数据字典文档自成工具,一键生成,效率倍增
- Spring Cloud入门五 hystrix
- 数据库系统概论知识点
- python怎么算列表的平方_Python中排序形式的元素的平方列表
- 通过inf文件让Win XP实现自动维护 [可实现系统定时任务]
- 推荐几款画韦恩图的在线工具
- RISCV MMU 概述
- SVM算法的生动讲解
- linux之getopt函数,linux之getopt 函数(转)
- TWAIN开发实战:10分钟内实现web应用中的扫描仪调用!
- flex4兼容flex3