图片的质量压缩和二次采样
二者的不同点
- 质量压缩:只会减少图片在sdcard中占的内存大小而不会改变运行内存不改变图片本身像素
- 二次采样:改变图片本身像素,减少加载图片的本身运行内存
上代码:
代码中注释都比较详细
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不会影响视觉效果。
图片的质量压缩和二次采样相关推荐
- glide 压缩图拍呢_Android图片压缩(二次采样)
一.简介: 在开发过程中,我们或多或少的都会接触到Bitmap这个东西,用的不好的话就会出现OOM问题,同时,也会有压缩的需求,可能有人会说,向Glide不是已经对图片压缩了么,但有时向图片上传到服务 ...
- android微信分享图片压缩,Android微信分享图片按质量压缩的解决方案
一.杂谈 微信分享图片的迷之bug,前一阵子接盘一个Hybrid App,分享要用原生的分享,搞了一阵子把微信分享搞上,测试又反馈了一个谜一样的Bug,我这边看Log打印了checkArgs fail ...
- Android微信分享图片按质量压缩的解决方案,androidndk开发教程
三.将io流转为byte数组 public static byte[] inputStreamToByte(InputStream is) { try { ByteArrayOutputStream ...
- java图片压缩质量_java图片高质量压缩
/** * 根据宽高编辑图片 * * @param outPath * 输出文件路径 * @param width * 输出文件宽 * @param hei ...
- java 图片质量压缩_java图片高质量压缩
/** * 根据宽高编辑图片 * * @param outPath * 输出文件路径 * @param width * 输出文件宽 * @param hei ...
- 浅谈android中加载高清大图及图片压缩方式(二)
这一讲就是本系列的第二篇,一起来聊下关于android中加载高清大图的问题,我们都知道如果我们直接加载原图的话,一个是非常慢,需要等待一定时间,如果没有在一定的时间内给用户响应的话,将会极大影响用户的 ...
- 性能优化之图片压缩(质量压缩、尺寸压缩)
前言 作为开发者的我们,经常会做一些上传图片和和保存图片啦 但是由于一些图片非常大,我们在上传或者保存的时候会占用大量的网络资源和本地资源,那么我们需要做的就是对图片就行压缩.以下介绍常见的两种压缩方 ...
- 仿微信头像图片裁剪并压缩到100K以下到本地
逻辑:1.打开本地相机-并传入path路径 2.在onActivityResult中,判断File(path)是否为空,不为空则跳转到下个界面 PS:这里为什么 ...
- Android图片压缩(质量压缩和尺寸压缩)
在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...
最新文章
- java免安装工具包_Java1.8安装及环境变量配置
- [Android Traffic] 使用缓存来避免重复的下载
- WM_PAINT消息小结
- SQL触发器实例讲解
- 【BZOJ 4170】 4170: 极光 (CDQ分治)
- python 的datetime模块使用
- ipv6地址为什么显示两个_【聚焦】IPv6进行时,别被这些因素绊住脚
- array用法 numpy_python--numpy(3)
- 解决许可证兼容性问题,Ubuntu 内核将内置 ZFS
- 带宽对于并发连接的一些总结
- 前端路由跳转丢失端口号_Laravel框架-路由的基本概念及实例分析
- anaconda和python有什么不一样_看着一样的胶带,价格为什么不一样?
- 直接读取Excel文件数据
- linux 网络对时
- Java初级程序员面试总结(二) --HashMap篇
- YS-F4Pro开发板第四章:开发环境搭建【IAR和KEIL区别】【cube软件】【ST-Link和Jlink】
- 服务器虚拟化三种架构,X86虚拟化之三种服务器虚拟化战略架构
- 腾讯新闻 React 同构直出优化实践
- 了解电子邮件:E-Mail从入门到精通
- 适合小白的大白话讲解---Git与Github的区别
热门文章
- 技能分享 | 麦肯锡教给我的写作武器:如何讲好一句话
- 阿里面试官亲述:如何利用设计模式改善业务代码
- 中国半导体工业测试设备市场深度研究分析报告
- android刷新时的圆形动画_Android 实现倒计时动画效果
- HTTP(S) 路由器 fabio
- 〖TensorFlow2.0笔记21〗自定义数据集(宝可精灵数据集)实现图像分类+补充:tf.where!
- Codeforces 311D Interval Cubing 数学 + 线段树 (看题解)
- 小米手机小技巧:小米手机心率测试
- Jetson Nano 关闭开启图形界面减少内存占用
- 支持扫描的单usb口打印服务器,LP-1000 TT168L1 打印机共享器 USB网络 远程 扫描 云打印服务器...