二者的不同点

  1. 质量压缩:只会减少图片在sdcard中占的内存大小而不会改变运行内存不改变图片本身像素
  2. 二次采样:改变图片本身像素,减少加载图片的本身运行内存
    上代码:
    代码中注释都比较详细
package com.example.administrator.zhiliangyasuoandbendihuancun;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ImageView;import java.io.FileOutputStream;import static android.graphics.BitmapFactory.decodeFile;public class MainActivity extends AppCompatActivity {private ImageView image1,image2;private Bitmap bitmap;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);image1= (ImageView) findViewById(R.id.img1);image2= (ImageView) findViewById(R.id.img2);getData();getDtata02();}
//    质量压缩减少本地的使用内存但是不会改变所占的运行内存public  void getData(){String url="/mnt/sdcard/aa.jpg";
//        使用Bitmap来操作图片首先使用Bitmap来加载一张图片bitmap= BitmapFactory.decodeFile(url);int width= bitmap.getWidth();int height= bitmap.getHeight();int count=bitmap.getRowBytes()*bitmap.getHeight();int count1= bitmap.getByteCount();Log.e("image", "onCreate: "+width+"---"+height+"---"+count+"---"+count1);image1.setImageBitmap(bitmap);
//        将得到的图片进行质量压缩然后在进行比较
//        这个就是讲图片质量压缩后保存try {FileOutputStream str = new FileOutputStream("/mnt/sdcard/aa_60.jpg");bitmap.compress(Bitmap.CompressFormat.JPEG,60,str);width= bitmap.getWidth();height= bitmap.getHeight();count=bitmap.getRowBytes()*bitmap.getHeight();count1= bitmap.getByteCount();Log.e("压缩后的比较", "onCreate: "+width+"---"+height+"---"+count+"---"+count1);
//            把它也适配一下比较图片之间的差距
//            其实图片上基本上没有差距但是占的存储内存少了好多bitmap= decodeFile("/mnt/sdcard/aa_60.jpg");image2.setImageBitmap(bitmap);} catch (Exception e) {e.printStackTrace();}}
//    二次采样public  void  getDtata02(){
//第一次采样只是把边框加载进来而不是具体的像素点BitmapFactory.Options options=new BitmapFactory.Options();
//        设置只加载边框的属性为trueoptions.inJustDecodeBounds=true;bitmap=  BitmapFactory.decodeFile("/mnt/sdcard/aa.jpg",options);image1.setImageBitmap(bitmap);
//        获取原图的宽和高int h=  options.outHeight;int w=options.outWidth;
//        定义缩放比例int Size=1;
//        如果高或者宽没有没有缩放到控件定义的大小就继续缩放
//        我在listview控件中定义的宽和高是300和200while (h/Size>200||w/Size>300){Size*=2;//如果没有缩放到达到的要求继续缩放}/*** 二次采样*/
//        二次采样需要把像素点都加载出来options.inJustDecodeBounds=false;
//        通过上面的循环就可以得到具体Size设置的大小options.inSampleSize=Size;
//        设置图片的格式options.inPreferredConfig=Bitmap.Config.ARGB_8888;bitmap= BitmapFactory.decodeFile("/mnt/sdcard/aa.jpg",options);image2.setImageBitmap(bitmap);}
}

布局里面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.administrator.zhiliangyasuoandbendihuancun.MainActivity">
<LinearLayout
    android:layout_width="300dp"android:layout_height="200dp"android:orientation="vertical"><ImageView
        android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:id="@+id/img1"/><ImageView
        android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:id="@+id/img2"/></LinearLayout></RelativeLayout>

质量布局和二次采样的布局是复用的所以直接覆盖了

最后配置读取sdcard的权限

 <uses-permission android:name="android.permission.INTERNET"/>


以上是对质量压缩后图片像素的比较发现值是相同的,并且一般压缩不低于30不会影响视觉效果。

图片的质量压缩和二次采样相关推荐

  1. glide 压缩图拍呢_Android图片压缩(二次采样)

    一.简介: 在开发过程中,我们或多或少的都会接触到Bitmap这个东西,用的不好的话就会出现OOM问题,同时,也会有压缩的需求,可能有人会说,向Glide不是已经对图片压缩了么,但有时向图片上传到服务 ...

  2. android微信分享图片压缩,Android微信分享图片按质量压缩的解决方案

    一.杂谈 微信分享图片的迷之bug,前一阵子接盘一个Hybrid App,分享要用原生的分享,搞了一阵子把微信分享搞上,测试又反馈了一个谜一样的Bug,我这边看Log打印了checkArgs fail ...

  3. Android微信分享图片按质量压缩的解决方案,androidndk开发教程

    三.将io流转为byte数组 public static byte[] inputStreamToByte(InputStream is) { try { ByteArrayOutputStream ...

  4. java图片压缩质量_java图片高质量压缩

    /** * 根据宽高编辑图片 * * @param outPath *            输出文件路径 * @param width *            输出文件宽 * @param hei ...

  5. java 图片质量压缩_java图片高质量压缩

    /** * 根据宽高编辑图片 * * @param outPath *            输出文件路径 * @param width *            输出文件宽 * @param hei ...

  6. 浅谈android中加载高清大图及图片压缩方式(二)

    这一讲就是本系列的第二篇,一起来聊下关于android中加载高清大图的问题,我们都知道如果我们直接加载原图的话,一个是非常慢,需要等待一定时间,如果没有在一定的时间内给用户响应的话,将会极大影响用户的 ...

  7. 性能优化之图片压缩(质量压缩、尺寸压缩)

    前言 作为开发者的我们,经常会做一些上传图片和和保存图片啦 但是由于一些图片非常大,我们在上传或者保存的时候会占用大量的网络资源和本地资源,那么我们需要做的就是对图片就行压缩.以下介绍常见的两种压缩方 ...

  8. 仿微信头像图片裁剪并压缩到100K以下到本地

    逻辑:1.打开本地相机-并传入path路径           2.在onActivityResult中,判断File(path)是否为空,不为空则跳转到下个界面           PS:这里为什么 ...

  9. Android图片压缩(质量压缩和尺寸压缩)

    在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...

最新文章

  1. java免安装工具包_Java1.8安装及环境变量配置
  2. [Android Traffic] 使用缓存来避免重复的下载
  3. WM_PAINT消息小结
  4. SQL触发器实例讲解
  5. 【BZOJ 4170】 4170: 极光 (CDQ分治)
  6. python 的datetime模块使用
  7. ipv6地址为什么显示两个_【聚焦】IPv6进行时,别被这些因素绊住脚
  8. array用法 numpy_python--numpy(3)
  9. 解决许可证兼容性问题,Ubuntu 内核将内置 ZFS
  10. 带宽对于并发连接的一些总结
  11. 前端路由跳转丢失端口号_Laravel框架-路由的基本概念及实例分析
  12. anaconda和python有什么不一样_看着一样的胶带,价格为什么不一样?
  13. 直接读取Excel文件数据
  14. linux 网络对时
  15. Java初级程序员面试总结(二) --HashMap篇
  16. YS-F4Pro开发板第四章:开发环境搭建【IAR和KEIL区别】【cube软件】【ST-Link和Jlink】
  17. 服务器虚拟化三种架构,X86虚拟化之三种服务器虚拟化战略架构
  18. 腾讯新闻 React 同构直出优化实践
  19. 了解电子邮件:E-Mail从入门到精通
  20. 适合小白的大白话讲解---Git与Github的区别

热门文章

  1. 技能分享 | 麦肯锡教给我的写作武器:如何讲好一句话
  2. 阿里面试官亲述:如何利用设计模式改善业务代码
  3. 中国半导体工业测试设备市场深度研究分析报告
  4. android刷新时的圆形动画_Android 实现倒计时动画效果
  5. HTTP(S) 路由器 fabio
  6. 〖TensorFlow2.0笔记21〗自定义数据集(宝可精灵数据集)实现图像分类+补充:tf.where!
  7. Codeforces 311D Interval Cubing 数学 + 线段树 (看题解)
  8. 小米手机小技巧:小米手机心率测试
  9. Jetson Nano 关闭开启图形界面减少内存占用
  10. 支持扫描的单usb口打印服务器,LP-1000 TT168L1 打印机共享器 USB网络 远程 扫描 云打印服务器...