1.android系统分配给一个应用的内存有限,加载大图片非常占的内存,为了避免内存溢出,有些图片要经过压缩,再使用

2.图片压缩可以分为图片大小(分辨率)压缩和图片质量压缩

 /*** 可能会有点耗时,可以在子线程调用** @param srcFile 要压缩的图片文件* @param path    压缩后的图片文件路径* @return File 压缩成功后的图片文件*/private File bitmapCompress(File srcFile, String path, int tagWidth, int tagHeight) {if (srcFile == null || !srcFile.exists()) {throw new RuntimeException("图片文件不存在");}if (TextUtils.isEmpty(path)) {return null;} else {if (path.contains(".")) {path = path.substring(0, path.lastIndexOf("."));path = path + ".jpg";//jpg格式} else {path = path + ".jpg";//jpg格式}}BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;//设置为true,不会申请内存,可以得到原生的宽和高Bitmap bitmap = BitmapFactory.decodeFile(srcFile.getAbsolutePath(), options);int outWidth = options.outWidth;//原生的宽int outHeight = options.outHeight;//原生的高/*** 图片大小(分辨率)压缩* options.inSampleSize  这是压缩比率,实际压缩比率根据自己需求通过算法计算*/options.inSampleSize = getSampleSize(outWidth, outHeight, tagWidth, tagHeight);options.inJustDecodeBounds = false;Bitmap bitmap2 = BitmapFactory.decodeFile(srcFile.getAbsolutePath(), options);ByteArrayOutputStream stream = new ByteArrayOutputStream();/*** 这里是图片质量压缩,第二个参数表示压缩率,100表示不压缩,0表示最大压缩*/bitmap2.compress(Bitmap.CompressFormat.JPEG, 60, stream);bitmap2.recycle();FileOutputStream outputStream = null;File tagFile = new File(path);try {if (!tagFile.exists()) {tagFile.createNewFile();}outputStream = new FileOutputStream(tagFile);outputStream.write(stream.toByteArray());outputStream.flush();} catch (Exception e) {e.printStackTrace();} finally {try {if (outputStream != null) {outputStream.close();}stream.close();} catch (IOException e) {e.printStackTrace();}}return tagFile;}/*** 压缩比率 每次减少0.5倍* @param srcWidth 原生的宽* @param srcHeight 原生的高* @param dstWidth 目标宽* @param dstHeight 目标高* @return*/private int getSampleSize(int srcWidth, int srcHeight, int dstWidth, int dstHeight) {int widthSize = 0;int heightSize = 0;while (srcWidth > dstWidth) {widthSize += 2;srcWidth = srcWidth / 2;}while (srcHeight > dstHeight) {heightSize += 2;srcHeight = (srcHeight / 2);}if (widthSize > heightSize) {return widthSize;} else {return heightSize;}}

Android图片文件的压缩相关推荐

  1. 图片上传压缩android,android 图片上传压缩常见问题分析

    图片的上传与压缩是android经常需要用到的步骤,那么,如何解决上传图片oom问题呢?android 图片上传压缩常见问题分析,希望可以帮助大家更加的了解android 图片方面的困惑. 下面,是我 ...

  2. Java 中调用 Apache API 实现图片文件的 压缩 与 解压 实例

    < Java 中调用 Apache API 实现图片文件的 压缩 与 解压 > 为什么不直接使用 Java JDK 中自带的 API 呢?必须使用 Apache API 实现文件的压缩与解 ...

  3. C#对图片文件的压缩、裁剪操作初探

    在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强 ...

  4. Android下文件的压缩和解压(Zip格式)

    Zip文件结构 ZIP文件结构如下图所示, File Entry表示一个文件实体,一个压缩文件中有多个文件实体. 文件实体由一个头部和文件数据组,Central Directory由多个File he ...

  5. Android 图片文件操作、屏幕相关、.9图片的理解

     一:Android图片操作 1.存储bitmap到本地文件系统 public static void bitmapToFile(Bitmap bitmap, String uri) {if(!ext ...

  6. Android 图片文件读取

    Android中图片的读取,修改,显示和保存涉及到的类大致如图所示. 在读取图片文件时,先将图片文件转换为InputStream对象,然后通过BitmapFactory将其转换为Bitmap对象. 在 ...

  7. android 图片文件流,Android 如何以流的方式读取图片文件

    在读取sdcard中的图片文件时,如何以流的方式读取图片文件,请参阅下面的函数: public static void ShowImg(String uri, ImageView iv) throws ...

  8. 超大100M图片文件怎么压缩?

    为了能够提升图片格式存储利用率和数据传输的速度,使用图片压缩功能是最快的处理方式,通过压缩减少图片中的多余内容.但是现在许多的图片压缩工具,最大可压缩20M,30M,50M大小的图片,那么超过50M的 ...

  9. android 压缩多个文件,Android下文件的压缩和解压(Zip格式)

    Zip文件结构 ZIP文件结构如下图所示, File Entry表示一个文件实体,一个压缩文件中有多个文件实体. 文件实体由一个头部和文件数据组,Central Directory由多个File he ...

  10. android 图片文件名字改换利器ACDsee10

    ACDsee10可以把图片文件改为前缀+数字名 比如这样 我改成了这样 打开 全选!!!!!!重命名即可

最新文章

  1. python基础指令-Python基础——与Python的指令交互
  2. python游戏贪吃蛇_Python写的贪吃蛇游戏例子_python
  3. 一台服务器最多能创建多少个 TCP 连接?
  4. docker删除本地已下载的镜像
  5. linux cpu负载巡检,linux服务器巡检报告.doc
  6. spring中@Inject和@Autowired的区别?分别在什么条件下使用呢?
  7. paip.proxool连接池 :Attempt to refer to a unregistered pool by its alias 'xx'
  8. java 代码混淆 开源_java代码混淆(使用 ProGuard 工具)
  9. 印象笔记 网易云笔记 腾讯文档 对比
  10. Qt信号槽机制与优势与不足
  11. c语言 四层电梯算法,电梯算法c语言
  12. matplotlib设置颜色、标记、线条,让你的图像更加丰富
  13. matlab图像分类器,一个用BoW|Pyramid BoW+SVM进行图像分类的Matlab Demo
  14. 多项式的各类计算(多项式的逆/开根/对数/exp/带余除法/多点求值)
  15. SQL:OUTER JOIN用法详解
  16. vscode如何运行python文件_vscode怎么运行.py文件_编程开发工具
  17. 你三十岁的生日,我写文章纪念 (西祠旧贴)
  18. Python 60 天 + 450 题,倾情奉献
  19. 操作系统面试问题集锦
  20. 电商支付平台支付安全保障措施

热门文章

  1. python numpy 矩阵运算_NumPy向量和矩阵的运算
  2. 框架设计--第三章 Spring AOP--习题答案
  3. 全国重点城市建筑物矢量数据合集三(Shp格式+带高度)
  4. android开发百度地图LocationClient找不到 解决
  5. [转]供应链管理方面的书籍
  6. 国内多少所高校开始博士生采用申请招生的方法了?
  7. 机器学习模型的超参数优化
  8. STVP 烧录hex详细讲解
  9. 微信小程序弹窗提示怎么写
  10. java 随机生成六位数的密码 (000001-999999)