二级采样 以及图片压缩

首先 创建一个工具类 用来对图片进行二级采样
ImageUtils

package com.example.lenovo.myapplication.Utils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class ImageUtils {
    //图片二级采样 掉一个方法 三个 参数 路径 宽 高
    // 此为第一次  宽高采样
    public static Bitmap scaleBitmap(String filePath, int width, int height){
        //实例化 工程设置
        BitmapFactory.Options options = new BitmapFactory.Options();
        //不加载Bitmap 到内存中
        options.inJustDecodeBounds = true;

        BitmapFactory.decodeFile(filePath,options);

        options.inSampleSize=Math.max(options.outHeight/height,options.outWidth/width);

        //第二次加载
        options.inJustDecodeBounds=false;

        Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);

        return bitmap;
    }

    public static Bitmap compress(Bitmap bitmap,int qual,File fiel){
        Bitmap result = bitmap;
        try {
            //缩放后的
            //bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "tmp.jpg")));
            //压缩后的,保存到output文件
            bitmap.compress(Bitmap.CompressFormat.JPEG, qual, new FileOutputStream(fiel));
            //再次解析压缩后的图片
            result = BitmapFactory.decodeFile(fiel.getAbsolutePath());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        };
        return result;

    }
}

//其次就能直接在方法里调用 这个图片的工具类
这里采用才Fragment里 进行处理
//Fragment()

package com.example.lenovo.myapplication.Fragment;

import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.content.CursorLoader;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

import com.example.lenovo.myapplication.R;
import com.example.lenovo.myapplication.Utils.ImageUtils;

import java.io.File;

public class WodeFragment extends Fragment {

    private EditText ekuan;
    private EditText egao;
    private EditText ezhi;
    private Button getimgae;
    private Button show;
    private ImageView imageView;
    private Uri url01;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fra_wode,container,false);

        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //找到资源ID
        ekuan = view.findViewById(R.id.wode_kuan);
        egao = view.findViewById(R.id.wode_gao);
        ezhi = view.findViewById(R.id.wode_quality);
        getimgae = view.findViewById(R.id.wode_getimage);
        show = view.findViewById(R.id.wode_show);
        imageView = view.findViewById(R.id.wode_image);
        //先获取图片
        getimgae.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //打开相册权限
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent,100);
            }
        });
        //生成的监听
        show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //101
                String filePath = getRealPathFromUrl(url01);
                //102  (String filePath, int width, int height)
                Bitmap bitmap = ImageUtils.scaleBitmap(filePath, Integer.parseInt(ekuan.getText().toString()),
                        Integer.parseInt(egao.getText().toString()));
                //103
                bitmap = ImageUtils.compress(bitmap, Integer.parseInt(ezhi.getText().toString()), new File(Environment.getExternalStorageDirectory(), "tmp2.jpg"));

                imageView.setImageBitmap(bitmap);
            }
        });
    }

    private String getRealPathFromUrl(Uri uri){
        //01
        String[] proj ={MediaStore.Images.Media.DATA};
        //02
        CursorLoader cursorLoader = new CursorLoader(getActivity(),uri,proj,null,null,null);
        //03
        Cursor cursor = cursorLoader.loadInBackground();
        //04
        int indexOrThrow = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        //05
        cursor.moveToFirst();
        //06
        return cursor.getString(indexOrThrow);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        //07
        if(requestCode == 100) {
            //08
            if(resultCode == getActivity().RESULT_OK) {
                //图片uri
                url01 = data.getData();
            }
            return;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }


}

//同时需要注意配置权限
//

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

猜你喜欢

转载自blog.csdn.net/qq_41972756/article/details/84060694