Android图片的选取和拍照

331 阅读1分钟
private Bitmap bitMap = null;

使用相机拍照

/**
     * 拍照获取图片
     * 
     */
    protected void doTakePhoto() {
        try {
            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
                    .fromFile(new File(Environment
                            .getExternalStorageDirectory(), "temp.jpg")));//保存照片为sd卡根目录下的temp.jpg
            startActivityForResult(cameraIntent, CAMERA_WITH_DATA);
        } catch (ActivityNotFoundException e) {
            e.printStackTrace();
        }
    }

从相册选取照片

/**
     * 从本地手机中选择图片
     */
    private void doSelectImageFromLoacal() {
        Intent localIntent = new Intent();
        localIntent.setType("image/*");
        localIntent.addCategory(Intent.CATEGORY_OPENABLE);
        localIntent.setAction("android.intent.action.GET_CONTENT");
        Intent localIntent2 = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(localIntent2, PHOTO_PICKED_WITH_DATA);
    }

图片缩放

public void startPhotoZoom(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
        intent.putExtra("crop", "true");
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX outputY 是裁剪图片宽高
        intent.putExtra("outputX", 200);
        intent.putExtra("outputY", 200);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, PHOTORESOULT);
    }

重写onActivityResult用以获取结果

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode != RESULT_OK)
            return;
        switch (requestCode) {
        case PHOTO_PICKED_WITH_DATA: // 从本地选择图片
            Uri uri = data.getData();
            ContentResolver cr = this.getContentResolver();    
            try {    
                bitMap = BitmapFactory.decodeStream(cr.openInputStream(uri));    
                /* 将Bitmap设定到ImageView */    
            } catch (FileNotFoundException e) {    
                DebugHelper.writeLog(e);    
            }    
            //          startPhotoZoom(photoadd);
            //进行图片的上传处理
            break;

        case CAMERA_WITH_DATA: // 拍照

            File picture = new File(Environment.getExternalStorageDirectory()
                    + "/temp.jpg");
            startPhotoZoom(Uri.fromFile(picture));
            break;

        case PHOTORESOULT:
            // 图片裁剪处理结果
            Bundle extras = data.getExtras();
            if (extras != null) {
                if (bitMap != null) {
                    bitMap.recycle();
                    bitMap = null;
                }
                bitMap = extras.getParcelable("data");
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                bitMap.compress(Bitmap.CompressFormat.JPEG, 80, stream);// (0  - 100)压缩文件
            }
            //图片上传处理
            break;

        }

    }

图片上传

图片的上传可能使用base64编码将图片解析为String字符串再上传:

if (bitMap != null) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitMap.compress(Bitmap.CompressFormat.PNG, 100, baos);
            BASE64Encoder encoder = new BASE64Encoder();
            String data = encoder.encode(baos.toByteArray());
            params.put("imageFile", data);
        }

base64下载:
download.csdn.net/detail/yang…