使用Android系統呼叫裁剪圖片並儲存
阿新 • • 發佈:2019-01-09
順序:開啟圖片--->獲取圖片Uri或者Bitmap--->開啟系統裁剪框--->獲得裁剪後的圖片的Uri或者Bitmap。
1.單純開啟相簿選擇圖片
Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT);// 開啟相簿獲取圖片 intent.setAction(Intent.ACTION_PICK);// 開啟相簿獲取圖片 intent.setType("image/*");// 這個引數是確定要選擇的內容為圖片 intent.putExtra("return-data", true);// 是否要返回,如果設定false取到的值就是空值 startActivityForResult(intent, REQUEST);
1.1選擇圖片並顯示在ImageView
Uri selectImg = data.getData();
ContentResolver contentResolver = this.getContentResolver();
try {
bm = BitmapFactory.decodeStream(contentResolver.openInputStream(selectImg));
normal_img.setImageBitmap(bm);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
1.2拍照圖片
File cameraFile = new File(Environment.getExternalStorageDirectory().getPath(),"abc.jpg"); if (cameraFile.exists()) { cameraFile.delete(); } Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)); startActivityForResult(intent2, TAKE_PICTURE);
2.選擇相簿裡的圖片進行裁剪
Intent antent = new Intent(Intent.ACTION_PICK, null);
antent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");//限制圖片型別,可寫"image/jpg"或"image/png"
//MediaStore.Images.Media.EXTERNAL_CONTENT_URI意思是返回的資料型別是圖片對應的Uri,不是將Bitmap直接返回。如果直接返回Bitmap,如果Bitmap太大,系統會強行壓縮造成圖片的失真,所以不管圖片大小,最好返回資料都用Uri
startActivityForResult(antent, CUT_REQUEST);
2.1呼叫裁剪框返回資料為Bimap
/**
* 以時間戳命名將bitmap寫入檔案
*
* @param bitmap
*/
public static void writeFileByBitmap2(Bitmap bitmap) {
String path = Environment.getExternalStorageDirectory().getAbsolutePath();//手機設定的儲存位置
File file = new File(path);
File imageFile = new File(file, System.currentTimeMillis() + ".png");
if (!file.exists()) {
file.mkdirs();
}
try {
imageFile.createNewFile();
FileOutputStream outputStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream);
outputStream.flush();
outputStream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2.1呼叫裁剪框返回資料為Uri
/**
* 以時間戳命名將bitmap寫入檔案
*
* @param bitmap
*/
public static void writeFileByBitmap2(Bitmap bitmap) {
String path = Environment.getExternalStorageDirectory().getAbsolutePath();//手機設定的儲存位置
File file = new File(path);
File imageFile = new File(file, System.currentTimeMillis() + ".png");
if (!file.exists()) {
file.mkdirs();
}
try {
imageFile.createNewFile();
FileOutputStream outputStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream);
outputStream.flush();
outputStream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3儲存圖片
/**
* 以時間戳命名將bitmap寫入檔案
*
* @param bitmap
*/
public static void writeFileByBitmap2(Bitmap bitmap) {
String path = Environment.getExternalStorageDirectory().getAbsolutePath();//手機設定的儲存位置
File file = new File(path);
File imageFile = new File(file, System.currentTimeMillis() + ".png");
if (!file.exists()) {
file.mkdirs();
}
try {
imageFile.createNewFile();
FileOutputStream outputStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream);
outputStream.flush();
outputStream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
注意:裁剪或者選擇圖片,最好返回資料的格式是Uri!!!