[关闭]
@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();
    }
}
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注