首先 创建一个工具类 用来对图片进行二级采样
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"/>