图片的压缩与二级采样
来源:互联网 发布:工具制作软件 编辑:程序博客网 时间:2024/06/07 02:41
一. 直接添加图片,进行图片的压缩采样
1. 在MainActivity的主部分代码:
import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.ImageView;public class MainActivity extends AppCompatActivity { private ImageView image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); image = (ImageView) findViewById(R.id.image); } //图片二级采样的点击事件 public void erJiCaiYang(View view){// //先给SD卡设置图片路径,方便下面获取图片// Uri uri = Uri.parse(Environment.getExternalStorageDirectory() + "/abc.jpg");// image.setImageURI(uri); //再调用方法,获取并设置图片 Bitmap bitmap = getBitmap(Environment.getExternalStorageDirectory()+"/abc.jpg",320,480); image.setImageBitmap(bitmap); } /** * 二次采样 返回bitmap * @param width * @param height * @param path * option 选项 */ private Bitmap getBitmap(String path, int width, int height) { //采用二次采样(缩小图片尺寸的方式) //1.步骤1 获取原始图片的宽高信息,用于进行采样的计算 //1.1 创建Options ,给BitmapFactory的内部解码器设置参数 BitmapFactory.Options options = new BitmapFactory.Options(); //1.2 设置inJustDecodeBounds 来控制解码器,只会进行图片宽高的获取,即只会加载边框,不会获取图片 //不占用内存,当使用这个参数,代表BitmapFactory.decodexxx()不会返回bitmap options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path,options); //1.3 获取边框的宽高 int outWidth = options.outWidth; int outHeight = options.outHeight; //1.4 计算缩放的比例 int scaleX = outWidth / width; final int scaleY = outHeight / height; //1.5 初始化压缩的比例 int sampleSize = 1; if (scaleX >scaleY && scaleY>1){ sampleSize =scaleX; }else if (scaleY >scaleX && scaleX>1){ sampleSize = scaleY; } //2. 根据比例进行压缩,并且压缩图片的质量 options.inJustDecodeBounds = false; //2.1 设置压缩的比例 options.inSampleSize = sampleSize; //2.2 设置图片的质量 Bitmap.Config.RGB_565一个像素点在内存中占有2个字节...Bitmap.Config.ARGB_8888占有四个字节 options.inPreferredConfig = Bitmap.Config.RGB_565; //以指定的选项解码图片,,,返回 return BitmapFactory.decodeFile(path,options); }}
2. 在activity_main显示的代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="activity.a06_picture_erjicaiyang.MainActivity"> <Button android:onClick="erJiCaiYang" android:text="二级采样获取图片" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> <ImageView android:id="@+id/image" android:layout_marginTop="18dp" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
二. 输入图片的宽高和压缩质量,进行图片的压缩采样
1. 在MainActivity的主部分代码:
import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.ImageView;public class MainActivity extends AppCompatActivity { private EditText edit_width; private EditText edit_height; private EditText edit_weight; private ImageView image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit_width = (EditText) findViewById(R.id.edit_width); edit_height = (EditText) findViewById(R.id.edit_height); edit_weight = (EditText) findViewById(R.id.edit_weight); image = (ImageView) findViewById(R.id.image); } //2.点击选择按钮,打开图库,从图库选择之后返回图片的路径 public void choose(View view){ //为SD卡设置图片路径 Uri uri = Uri.parse(Environment.getDownloadCacheDirectory() + "/abc.jpg"); image.setImageURI(uri); } //3.输入宽、高、压缩质量,点击生成按钮,进行二次采样处理 public void done(View view){ Bitmap bitmap = getBitmap(Environment.getExternalStorageDirectory()+"/abc.jpg",edit_width.getText().toString(),edit_height.getText().toString(),edit_weight.getText().toString()); image.setImageBitmap(bitmap); } /** *4.设置只加载图片的宽高尺寸,和目标尺寸进行比较,每次缩放1/2的方式算出宽高缩放的倍数 5.设置加载图片的内容,将图片加载到缩放后的目标尺寸中去 6.将处理后的图片,按照设置的压缩质量进行输出 7.将最终的图片显示在下方的ImageView中。 * @param path * @param width * @param height * @param weight * @return */ private Bitmap getBitmap(String path, String width, String height, String weight) { //采用二次采样(缩小图片尺寸的方式) //1.步骤1 获取原始图片的宽高信息,用于进行采样的计算 //1.1 创建Options ,给BitmapFactory的内部解码器设置参数 BitmapFactory.Options options = new BitmapFactory.Options(); //1.2 设置inJustDecodeBounds 来控制解码器,只会进行图片宽高的获取,即只会加载边框,不会获取图片 //不占用内存,当使用这个参数,代表BitmapFactory.decodexxx()不会返回bitmap options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path,options); //1.3 获取宽高 int outWidth = options.outWidth; int outHeight = options.outHeight; //1.4 计算缩放的比例 Integer valueOfwidth = Integer.valueOf(width); Integer valueOfheight = Integer.valueOf(height); int scaleX =outWidth/valueOfwidth; int scaleY = outHeight / valueOfheight; //1.5 初始化缩放的比例 int simpleSize = 1; if (scaleX > scaleY && scaleY >1){ simpleSize = scaleX; }else if (scaleY > scaleX & scaleX >1){ simpleSize = scaleY; } //2. 根据比例进行压缩,并且压缩图片的质量 options.inJustDecodeBounds = false; //2.1 设置压缩的比例 options.inSampleSize = simpleSize; //2.2 设置压缩的质量 options.inPreferredConfig = Bitmap.Config.RGB_565; //将处理后的图片,按照设置的压缩质量进行输出 return BitmapFactory.decodeFile(path,options); }}
2. 在activity_main显示的代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" tools:context="activity.CaiYang.MainActivity"> <Button android:text="选择图片" android:onClick="choose" android:layout_width="300dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:text="宽" android:layout_marginLeft="47dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/edit_width" android:layout_width="50dp" android:layout_height="wrap_content" /> <TextView android:text="高" android:layout_marginLeft="35dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/edit_height" android:layout_width="50dp" android:layout_height="wrap_content" /> <TextView android:text="压缩质量" android:layout_marginLeft="30dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/edit_weight" android:layout_width="50dp" android:layout_height="wrap_content" /> </LinearLayout> <Button android:text="生成" android:onClick="done" android:layout_width="300dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> <ImageView android:id="@+id/image" android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal"/></LinearLayout>
说明:图片是自定义的,是需要自己使用DDMS导入SD卡的;在清单文件中需要加入文件的读写权限
阅读全文
0 0
- 图片的压缩与二级采样
- 图片的压缩与二级采样
- 质量压缩与二级采样
- 图片的二级采样
- 关于网络图片的采样与压缩保存
- 图片的质量压缩和二次采样
- 图片的二次采样和压缩_lemonen
- 图片压缩 二次采样
- 采样与压缩感知
- 二级采样
- 图片加载+图片操作+二级采样+存sd卡
- Android 图片二次采样、质量压缩
- Android 图片二次采样、质量压缩
- Android 图片二次采样、质量压缩
- 图片压缩大全及二次采样
- Android 图片二次采样、质量压缩
- 图片二次采样和按质量压缩
- Android 图片二次采样、质量压缩
- 会场安排问题
- 低功耗蓝牙Ble外围设备
- Java IO笔记(FileReader/FileWriter)
- python连接SQL Server
- java 类初始化顺序
- 图片的压缩与二级采样
- rabbitmq遇到的一些坑
- select、poll、epoll之间的区别总结[整理]
- HDU-2546 饭卡 (和放入顺序有关的01背包)
- 关于ThreadLocal深入分析
- matconvnet环境下训练自己的数据集及模型测试-mnist网络结构-cifar10部分数据集
- 201612-3 权限查询 ccf
- JAVA中绘制文字时Font的用法
- 谈谈Memcached与Redis