Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 選擇圖片 剪裁 拍照 兼容所有版本的代碼

android 選擇圖片 剪裁 拍照 兼容所有版本的代碼

編輯:關於Android編程

在做項目的時候,總是避免不了頭像的剪裁和選取,然而4.4以後 以前能夠使用的代碼 ,也用不了了。 做下記錄吧。因為下面代碼我用了幾次了。

以後直接復制粘貼。

 

1.拍照 和選擇圖片

選擇圖片

			intent = new Intent(Intent.ACTION_GET_CONTENT);
			intent.setType("image/*");
			startActivityForResult(intent, GALLERY_REQUEST_CODE);



拍照

			intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
			startActivityForResult(intent, CAMERA_REQUEST_CODE);

2.獲取系統傳來的值

標記符
	private static int CAMERA_REQUEST_CODE = 1;
	private static int GALLERY_REQUEST_CODE = 2;
	private static int CROP_REQUEST_CODE = 3;



	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == CAMERA_REQUEST_CODE) {
			if (data == null) {
				return;
			} else { //拍照
				Bundle extras = data.getExtras();
				if (extras != null) {
					Bitmap bm = extras.getParcelable("data");
					Uri uri = saveBitmap(bm);
					startImageZoom(uri);
				}
			}
		} else if (requestCode == GALLERY_REQUEST_CODE) {
			if (data == null) {//相冊
				return;
			}
			Uri uri;
			uri = data.getData();
			Uri fileUri = convertUri(uri);
			startImageZoom(fileUri);
		} else if (requestCode == CROP_REQUEST_CODE) {
			if (data == null) {
				return;
			}//剪裁後的圖片
			Bundle extras = data.getExtras();
			if (extras == null) {
				return;
			}
			Bitmap bm = extras.getParcelable("data");
			ShowImageView(bm);
		}
	}

圖片選取後 根據Url 轉成流 並保存


	private Uri convertUri(Uri uri) {
		InputStream is = null;
		try {
			is = getContentResolver().openInputStream(uri);
			Bitmap bitmap = BitmapFactory.decodeStream(is);
			is.close();
			return saveBitmap(bitmap);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}

保存圖片 記得加權限

	private Uri saveBitmap(Bitmap bm) {
		File tmpDir = new File(Environment.getExternalStorageDirectory()
				+ "/xiaoxin");
		if (!tmpDir.exists()) {
			tmpDir.mkdir();
		}
		File img = new File(tmpDir.getAbsolutePath() + "love.png");
		try {
			FileOutputStream fos = new FileOutputStream(img);
			bm.compress(Bitmap.CompressFormat.PNG, 85, fos);
			fos.flush();
			fos.close();
			Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_SHORT).show();
			return Uri.fromFile(img);
		} catch (FileNotFoundException e) {
			Toast.makeText(MainActivity.this, "失敗了", Toast.LENGTH_SHORT).show();
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			e.printStackTrace();
			Toast.makeText(MainActivity.this, "失敗了", Toast.LENGTH_SHORT).show();
			return null;
		}

	}


3.剪裁圖片


	/**
	 * 剪裁圖片
	 * 
	 * @param uri
	 */
	private void startImageZoom(Uri uri) {
		Intent intent = new Intent("com.android.camera.action.CROP");
		intent.setDataAndType(uri, "image/*");
		intent.putExtra("crop", "true");
		intent.putExtra("aspectX", 1);
		intent.putExtra("aspectY", 1);
		intent.putExtra("outputX", 150);
		intent.putExtra("outputY", 150);
		intent.putExtra("return-data", true);
		startActivityForResult(intent, CROP_REQUEST_CODE);
	}

4.結束語:

記得加權限哦 ,在剪裁完圖片後 會有一個 Bitmap 對象。你可以拿來設置到ImageView上面去。也可以直接傳送到服務器去。有問題的話 請留言
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved