android上传头像

  • 从手机相册中获取图片截取上传
1.调用手机相册activity
			intent = new Intent(Intent.ACTION_PICK, null);
			intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
					"image/*");
			startActivityForResult(intent, REQUEST_CODE_900);
2.onActivityResult中获取URI数据
			// 获取原图路径
			String orgImagePath = getRealPathFromURI(data.getData());
			// 拷贝原图到指定SD卡目录 headFilePath为SD上保存图片的路径
			if (copyFile(new File(orgImagePath), new File(
					headFilePath))) {
				//新建一个headFilePath对应的Uri		
				Uri headFileUri = Uri.fromFile(new File(headFilePath));
				//裁剪图片	
				startImgResize(headFileUri);
			}
	public String getRealPathFromURI(Uri contentUri) {
		// 待查询的字段
		String[] proj = { MediaStore.Images.Media.DATA };
		// 调用activity提供的managedQuery查询uri中的数据
		Cursor cursor = managedQuery(contentUri, proj, null, null, null);

		if (cursor != null) {
			// 获取游标中指定字段的索引
			int column_index = cursor
					.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
			cursor.moveToFirst();
			return cursor.getString(column_index);
		} else {
			// 如果游标为空说明获取的已经是绝对路径了
			return contentUri.getPath();
		}

	}
	/**
	 * 复制图片
	 */
	public static boolean copyFile(File srcFile, File saveFile) {
		BufferedOutputStream bos = null;
		BufferedInputStream bis = null;
		try {
			bis = new BufferedInputStream(new FileInputStream(srcFile));
			bos = new BufferedOutputStream(new FileOutputStream(saveFile));

			byte[] buffer = new byte[1024];
			int len = -1;
			while (-1 != (len = bis.read(buffer))) {
				bos.write(buffer, 0, len);
			}
			bos.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		} finally {
			if (bis != null) {
				try {
					bis.close();
				} catch (IOException e) {
				}
			}
			if (bos != null) {
				try {
					bos.close();
				} catch (IOException e) {
				}
			}
		}
		return true;
	}
	/**
	 * @param uri
	 *            所需要裁剪的图片的uri
	 */
	public void startImgResize(Uri uri) {
		Intent intent = new Intent("com.android.camera.action.CROP"); // 裁剪意图
		intent.setDataAndType(uri, "image/*"); // 格式
		intent.putExtra("crop", "true"); // 发送裁剪信号
		intent.putExtra("aspectX", 1); // X方向上的比例
		intent.putExtra("aspectY", 1); // Y方向上的比例
		intent.putExtra("outputX", 300); // 裁剪区的宽
		intent.putExtra("outputY", 300); // 裁剪区的高
		intent.putExtra("scale", true); // 是否保留比例
		intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); // 将URI指向相应的file:///
		intent.putExtra("return-data", false); // 是否将数据保留在Bitmap中返回
		intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
		intent.putExtra("noFaceDetection", false); // 不检测人脸
		intent.putExtra("circleCrop", false); // 圆形裁剪区域
		intent.putExtra("scaleUpIfNeeded", true);// 去黑边
		startActivityForResult(intent, REQUEST_CODE_800);//在onActivityResult中调用上传逻辑
	}
  • 用相机拍照后截取上传
1.调用相机拍照activity
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
    //指定一个Uri作为照片输出的路径  
    Uri headFileUri = Uri.fromFile(new File(headFilePath));  
    intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,  
            headFileUri);  
    startActivityForResult(intent, REQUEST_CODE_700);

2.onActivityResult中
startImgResize(headFileUri);//裁剪图片

3.上传图片
      处理逻辑同从相册中获取照片上传。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值