@MasterLeng
2015-04-01T10:55:39.000000Z
字数 2175
阅读 1609
移动开发
图片上传
头像
相信在一个完整的APP里少不了图片上传这个功能的,常用到的就是头像的图片上传,一般我们所上传的是相册里的照片。一般我们需要用到android里Activity的startActivityForResult方法(Fragment里也有此方法,注意Activity拦截的问题)。上代码:
//相册选取图片
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);//设置
intent.setType("image/*"); //设置返回类型
startActivityForResult(intent,SELECT_PICTURE);
//相机拍照得到的图片
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
final Intent intent_camera = getActivity.getPackageManager().getLaunchIntentForPackage("com.android.camera");
if(intent_camera!=null)
{intent.setPackage("com.android.camera")};//启用系统摄像头
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.from(new File(fileName)));//fileName是取得图片后存储的位置
startActivityForResult(intent,TAKE_PHOTO);
//处理接收到的数据
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CUP_PICTURE:
keepPicture(data); //保存图片到本地
break;
case SELECT_PHOTO:
Uri uri = data.getData();
startPhotoZoom(uri); //切割相册图片
break;
case TAKE_PHOTO:
//相机照片存储的文件地址并取得相应的Uri
File fileTakePhoto = new File(fileName);
Uri takePhotoUri = Uri.fromFile(fileTakePhoto);
startPhotoZoom(takePhotoUri); //切割相机图片
break;
default:
break;
}
}
//切割图片
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, CUP_PICTURE);
}
//保存图片
public void keepPicture(Intent picData)
{
String picStr;//Base64字符串
Bitmap bitmap = picData.getParcelableExtra("data");
if(bitmap==null)
{
Toast.show(context,"没有图片数据",Toast.LENGTH_SHORT).show();
}
else
{
//保存图片所在文件夹,Common是个封装类,封装获得SD卡的路径
File file = new File(Common.getSDPath()+"/userIcon");
if(!file.exsists())
{
file.mkdirs();
}
String filePath = Common.getSDPath()+"/userIcon/"+"id.PNG";
File picFile = new File(filePath);
OutputStream ops = new FileOutputStream(picFile);
bitmap.compress(Bitmap.CompressFormat.PNG.50,ops);
picStr = Common.filePathToBase64(filePath);//把制定文件转换成Base64字符串
ops.flush();
ops.close();
}
}