圖片二次採集和壓縮 ---》需要清單檔案宣告註冊讀寫許可權
阿新 • • 發佈:2018-11-10
MainActivity
package com.example.renzhili20181107; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Interpolator; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; import android.support.annotation.Nullable; import android.support.v4.content.CursorLoader; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import java.io.File; public class MainActivity extends AppCompatActivity { private EditText width,height,liang; private ImageView imageView; private Button query,but; private final int UPDETE=100; private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取資源id width=findViewById(R.id.width); height=findViewById(R.id.height); liang=findViewById(R.id.liang); imageView=findViewById(R.id.image); query=findViewById(R.id.query); but=findViewById(R.id.but); //點選選取圖片 query.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //開啟相簿 Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent,UPDETE); } }); //生成圖片 but.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (uri!=null) { String fromURI = getRealPathFromURI(uri); Bitmap bitmap = Utils.RequeryImage(fromURI, Integer.parseInt(width.getText().toString().trim()), Integer.parseInt(height.getText().toString().trim())); bitmap = Utils.compress(bitmap, Integer.parseInt(liang.getText().toString().trim()), new File(Environment.getExternalStorageDirectory(), "tmp.jpg")); imageView.setImageBitmap(bitmap); }else{ Toast.makeText(MainActivity.this,"沒有選取照片",Toast.LENGTH_LONG).show(); } } }); } private String getRealPathFromURI(Uri contentUri) { //傳入圖片uri地址 String[] proj = { MediaStore.Images.Media.DATA }; CursorLoader loader = new CursorLoader(this, contentUri, proj, null, null, null); Cursor cursor = loader.loadInBackground(); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (requestCode==UPDETE&&resultCode==RESULT_OK){ uri = data.getData(); return; } super.onActivityResult(requestCode, resultCode, data); } }
、、工具類
package com.example.renzhili20181107; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.io.File; import java.io.FileOutputStream; public class Utils { //二次採集 public static Bitmap RequeryImage(String urlimage, int width, int height){ BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds=true; BitmapFactory.decodeFile(urlimage,options); options.inSampleSize=Math.max(options.outWidth/width,options.outHeight/height); options.inJustDecodeBounds=false; Bitmap bitmap = BitmapFactory.decodeFile(urlimage, options); return bitmap ; } //圖片壓縮 public static Bitmap compress(Bitmap bitmap, int qual, File output){ Bitmap result=bitmap; try { bitmap.compress(Bitmap.CompressFormat.JPEG, qual, new FileOutputStream(output)); result = BitmapFactory.decodeFile(output.getAbsolutePath()); } catch (Exception e) { e.printStackTrace(); } return result; } }