最近项目需要用到图片压缩,所以简单总结一下。大致分为三种压缩。

  1. 图片质量压缩。
    • 意思就是降低图片的质量,针对文件处理,但本身的像素点并不会减少。
      • 本来像素点是这样的,经过算法计算,若一个像素点周围所存的值都一样的话,则清除周围的像素点所存的值。
      • 代码如下
      •         /**
        * 1. 质量压缩
        设置bitmap options属性,降低图片的质量,像素不会减少
        第一个参数为需要压缩的bitmap图片对象,第二个参数为压缩后图片保存的位置
        设置options 属性0-100,来实现压缩
        * @param bmp
        * @param file
        */
        public static void compressImageToFile(Bitmap bmp,File file) {
        // 0-100 100为不压缩
        int options = 20;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 把压缩后的数据存放到baos中
        bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
        try {
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(baos.toByteArray());
        fos.flush();
        fos.close();
        } catch (Exception e) {
        e.printStackTrace();
        }
        }

  2.图片尺寸压缩。

    • 这个没什么好说的,就是通过缩放图片像素来达到减少图片占用内存的大小。
    • public static void compressBitmapToFile(Bitmap bmp, File file){
      // 尺寸压缩倍数,值越大,图片尺寸越小
      int ratio = 8;
      // 压缩Bitmap到对应尺寸
      Bitmap result = Bitmap.createBitmap(bmp.getWidth() / ratio, bmp.getHeight() / ratio, Config.ARGB_8888);
      Canvas canvas = new Canvas(result);
      Rect rect = new Rect(0, 0, bmp.getWidth() / ratio, bmp.getHeight() / ratio);
      canvas.drawBitmap(bmp, null, rect, null); ByteArrayOutputStream baos = new ByteArrayOutputStream();
      // 把压缩后的数据存放到baos中
      result.compress(Bitmap.CompressFormat.JPEG, 100 ,baos);
      try {
      FileOutputStream fos = new FileOutputStream(file);
      fos.write(baos.toByteArray());
      fos.flush();
      fos.close();
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

  3.图片采样率压缩。

    • 设置图片的采样率,降低图片像素
    • public static void compressBitmap(String filePath, File file){
      // 数值越高,图片像素越低
      int inSampleSize = 8;
      BitmapFactory.Options options = new BitmapFactory.Options();
      options.inJustDecodeBounds = false;
      // options.inJustDecodeBounds = true;//为true的时候不会真正加载图片,而是得到图片的宽高信息。
      //采样率
      options.inSampleSize = inSampleSize;
      Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); ByteArrayOutputStream baos = new ByteArrayOutputStream();
      // 把压缩后的数据存放到baos中
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100 ,baos);
      try {
      if(file.exists())
      {
      file.delete();
      }
      else {
      file.createNewFile();
      }
      FileOutputStream fos = new FileOutputStream(file);
      fos.write(baos.toByteArray());
      fos.flush();
      fos.close();
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

4.最后推荐一个图片压缩工具

  • 鲁班压缩(Luban)  https://github.com/Curzibn/Luban
  • Luban(鲁班)就是通过在微信朋友圈发送近100张不同分辨率图片,对比原图与微信压缩后的图片逆向推算出来的压缩算法。

Android-简单总结一下图片压缩的更多相关文章

  1. 【Android - 进阶】之图片压缩

    很多时候,如果APP需要下载和加载很多图片(尤其是大图片)的时候,就往往会报如下图所示的错误: 如上图所示,OOM(OutOfMemoryError)表示内存溢出,这是因为网络或内存中的图片被加载成B ...

  2. Android性能优化之图片压缩优化

    1 分类Android图片压缩结合多种压缩方式,常用的有尺寸压缩.质量压缩.采样率压缩以及通过JNI调用libjpeg库来进行压缩. 参考此方法:Android-BitherCompress 备注:对 ...

  3. android内存优化之图片压缩和缓存

    由于手机内存的限制和网络流量的费用现在,我们在加载图片的时候,必须要做好图片的压缩和缓存. 图片缓存机制一般有2种,软引用和内存缓存技术. 1.压缩图片:压缩图片要既不能模糊,也不能拉伸图片. 图片操 ...

  4. android bitmap compress(图片压缩)

    android bitmap compress android的照相功能随着手机硬件的发展,变得越来越强大,能够找出很高分辨率的图片. 有些场景中,需要照相并且上传到服务,但是由于图片的大小太大,那么 ...

  5. [Android算法] bitmap 将图片压缩到指定的大小

    Bitmap压缩到指定大小: private void imageZoom() {//图片允许最大空间 单位:KBdouble maxSize =400.00;//将bitmap放至数组中,意在bit ...

  6. Android 调用jepg库进行图片压缩,保持图片不失真

    1. 浅谈为什么Android和iOS图片质量差距那么大? 首先来说,作为一个安卓狗,机器当然用的是安卓的手机.现在的安卓手机大多数都会以高清拍照,动不动就几千万柔光相机来吸引各种买家.买来后,拍照发 ...

  7. Android 中图片压缩分析(上)

    作者: shawnzhao,QQ音乐技术团队一员 一.前言 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是质量压缩,其二是下采样压缩. 前者是在不改变图片尺寸的情 ...

  8. Android 图片压缩器

    概述 Android 图片压缩器:一款高效的图片压缩器库,支持批量压缩,异步压缩.多线程多任务压缩,压缩比设置等特性. 详细 代码下载:http://www.demodashi.com/demo/12 ...

  9. 每个人都要学的图片压缩终极奥义,有效解决 Android 程序 OOM

    # 由来 在我们编写 Android 程序的时候,几乎永远逃避不了图片压缩的难题.除了应用图标之外,我们所要显示的图片基本上只有两个来源: 来自网络下载 本地相册中加载 不管是网上下载下来的也好,还是 ...

  10. Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案

    1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...

随机推荐

  1. SVN密码找回 完美方案

    问题背景 SVN(Subversion)版本管理工具.本文以Windows操作系统下使用SVN的场景. 长时间不使用SVN,可能会出现忘记了SVN密码的尴尬局面.那么,该如何找回SV密码呢? 处理思路 ...

  2. 如何在 Linux 中查看可用的网络接口

    在我们安装完一个 Linux 系统后最为常见的任务便是网络配置了.当然,你可以在安装系统时进行网络接口的配置.但是,对于某些人来说,他们更偏爱在安装完系统后再进行网络的配置或者更改现存的设置.众所周知 ...

  3. (转)pycharm快捷键、常用设置、配置管理

    原文: http://blog.csdn.net/pipisorry/article/details/39909057 本博客一直在同步更新中! 内容包含:pycharm学习技巧 Learning t ...

  4. 课程回顾-Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization

    训练.验证.测试划分的量要保证数据来自一个分布偏差方差分析如果存在high bias如果存在high variance正则化正则化减少过拟合的intuitionDropoutdropout分析其它正则 ...

  5. 【EF6学习笔记】(十二)EF高级应用场景

    本篇原文链接:Advanced Entity Framework Scenarios 本篇主要讲一些使用Code First建立ASP.NET WEB应用的时候除了基础的方式以外的一些扩展方式方法: ...

  6. Java并发编程-AbstractQueuedSynchronizer源码分析

    简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...

  7. HBuilder的安装及用法

    一,简介HBuilder 1.1,什么是Hbuilder? HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE.HBuilder的编写用到了Java.C.Web和Ru ...

  8. RabbitMQ系列(一)RabbitMQ在Ubuntu上的环境搭建

    环境配置 Ubuntu Server 18.04 RabbitMQ 3.6.10 安装之前 我们使用apt-get进行RabbitMQ安装,在安装之前,强烈建议您把apt源换位国内,大大增加下载安装的 ...

  9. shell中$后加引号有什么用($"string"和$'string')

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 有些时候在某些服务管理脚本中看到$"$string& ...

  10. VRF在区块链中的应用

    最近区块链领域流行了一种"怪病",许多区块链项目或者设计方案都加入了一个叫做VRFs的算法.那么, (1) 什么是VRFs? (2) VRFs在区块链中解决了什么问题? 本文旨在介 ...