本文转载只供参考

一.图片压缩方式

/*** 图片按比例大小压缩方法* @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把图片压缩到一定大小并不失真相关推荐

  1. Android中图片压缩方案详解

    如感觉排版不舒服,可移步至此处查看 图片的展示可以说在我们任何一个应用中都避免不了,可是大量的图片就会出现很多的问题,比如加载大图片或者多图时的OOM问题,可以移步到Android高效加载大图.多图避 ...

  2. Android LibJpeg图片压缩

    Android的图片压缩 Android的图片压缩的几种方式:质量压缩,尺寸压缩,采样率压缩,通过NDK调用libjpeg库进行压缩! 质量压缩 通过设置bitmap options属性,降低图片的质 ...

  3. 图片大小如何调整到10k?图片压缩到指定大小怎么弄?

    在现代社交网络和在线平台上,上传的图片大小都会有限制,过大的图像会导致性能问题.加载时间延长和带宽消耗,所以图片压缩指定大小(https://www.yasuotu.com/imagesize)就成了 ...

  4. 图片不超过200kb怎么调整?一分钟学会图片压缩到指定大小

    很多网站为了保证页面的流畅度会限制图片上传的kb大小,所以我们需要把图片压缩到指定大小(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图),那么有没有比较快捷的方法可以自定义压缩图片大小呢?今天 ...

  5. iOS图片压缩成指定大小

    在iOS中涉及一些图片显示和处理问题,在实际中碰到过修改账户头像时上传头像出现 error = Error Domain=com.alamofire.error.serialization.respo ...

  6. 照片怎么改到100k?图片压缩到固定大小?

    怎么把jpg图片压缩到100k大小,看起来很复杂的问题其实我们可以使用jpg压缩工具--压缩图,利用它的图片压缩到固定大小功能来实现我们的压缩需求,操作十分简单,快来试试看吧. 1.打开电脑浏览器进入 ...

  7. 图片如何缩小到100k?怎么把图片压缩到指定大小?

    有时候在平台上传图片会规定大小100k,图片如何缩小到100k呢?可以使用压缩图的图片压缩到指定大小功能,十分的方便一键操作就可以将图片压缩到100k以内,来看看具体操作步骤吧. 1.打开压缩图点击图 ...

  8. 如何将图片压缩到指定大小?压缩图片大小的方法

    很多报名平台都对图片大小有固定的数值要求,所以不少小伙伴来问,怎么压缩图片200k以下(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)?想要把图片压缩指定大小就要用到一些比较专业的工具,今天 ...

  9. 怎么把图片压缩到30k以内?如何图片压缩到指定大小?

    在公务员考试报名时,需要提交个人证件照片,通常都会要求照片大小不能超过30kb,否则会导致上传失败.那么怎么把图片压缩到30k以内呢?想要把图片压缩到30kb就需要用到压缩图的图片压缩指定大小(图片压 ...

最新文章

  1. poj 1904 King's Quest
  2. 帝国cms模板辅助编辑插件lsk_ecms.crx使用说明
  3. Docker Swarm删除节点
  4. 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(七)界面安装
  5. 编写你的第一个 Django 应用,第 3 部分
  6. java web随机抽取_java实现随机抽取奖品工具类
  7. OLEDB Excel 与C# 的数据流通方法
  8. R语言第九讲 验证集法
  9. 评分预测会不会大于满分5.0的情况?
  10. 字典生成_数据字典文档自成工具,一键生成,效率倍增
  11. Spring Cloud入门五 hystrix
  12. 数据库系统概论知识点
  13. python怎么算列表的平方_Python中排序形式的元素的平方列表
  14. 通过inf文件让Win XP实现自动维护 [可实现系统定时任务]
  15. 推荐几款画韦恩图的在线工具
  16. RISCV MMU 概述
  17. SVM算法的生动讲解
  18. linux之getopt函数,linux之getopt 函数(转)
  19. TWAIN开发实战:10分钟内实现web应用中的扫描仪调用!
  20. flex4兼容flex3

热门文章

  1. Eclipse使用教程1
  2. GhostXP_SP2电脑公司特别版_v7.8
  3. 无符号整数与有符号整数相加问题
  4. RK3288的几种USB模式
  5. Bootstrap 超大屏幕(Jumbotron)
  6. 互联网如何基于4P理论做运营?
  7. ps抠图教程从入门到高级
  8. 【web前端】移动端控制台插件,手机端页面查看相关页面控制台信息
  9. 4412开发板UT-Exynos4412三星A9四核4412开发平台调试android4.0GPS功能信号超强
  10. NSSCTF---PNGPDF