android 选择照片(相册/拍照/切图)

    private static final int PHOTO_REQUEST_CAREMA = 0;//相机拍照
    private static final int PHOTO_REQUEST_GALLERY = 1;//从相册中选择
    private static final int PHOTO_REQUEST_CUT = 2;//剪切结果结果
    private static final String PHOTO_FILE_NAME = "zhuangxiaomi_head.jpg";
    private File headPhotoFile;
    <pre name="code" class="java">  /**从相册中获取*/
    private void gallery(){
        // 激活系统图库,选择一张图片
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY
        startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
    }

    /**从相机获取*/
    public void camera() {
        // 激活相机
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        // 判断存储卡是否可以用,可用进行存储
        if (hasSdcard()) {
            headPhotoFile = new File(Environment.getExternalStorageDirectory(),PHOTO_FILE_NAME);
            // 从文件中创建uri
            Uri uri = Uri.fromFile(headPhotoFile);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        }
        // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA
        startActivityForResult(intent, PHOTO_REQUEST_CAREMA);
    }

    /**剪切图片*/
    private void crop(Uri uri) {
        // 裁剪图片意图
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        // 裁剪框的比例,1:1
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // 裁剪后输出图片的尺寸大小
        intent.putExtra("outputX", 250);
        intent.putExtra("outputY", 250);

        intent.putExtra("outputFormat", "JPEG");// 图片格式
        intent.putExtra("noFaceDetection", true);// 取消人脸识别
        intent.putExtra("return-data", true);
        // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
    }

    /**判断sdcard是否被挂载*/
    private boolean hasSdcard() {
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PHOTO_REQUEST_GALLERY) {/**从相册返回的数据*/

            if (data != null) {
                // 得到图片的全路径
                Uri uri = data.getData();
                crop(uri);
            }

        } else if (requestCode == PHOTO_REQUEST_CAREMA) {/**从相机返回的数据*/

            if (hasSdcard()) {
                crop(Uri.fromFile(headPhotoFile));
            } else {
                makeToast("未找到存储卡,无法存储照片!");
            }

        } else if (requestCode == PHOTO_REQUEST_CUT) {/**从剪切图片返回的数据*/

            if (data != null) {
                Bitmap bitmap = data.getParcelableExtra("data");
//                this.headImage.setImageBitmap(bitmap);//显示剪切后的图片
                byte[] b = BitmapUtil.getImageBytes(bitmap);/**压缩图片*/
                String s = Base64.encodeToString(b, Base64.NO_WRAP);
//                submitHead(s);
            }
            try {
                // 将临时文件删除
                headPhotoFile.delete();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        super.onActivityResult(requestCode, resultCode, data);
    }
<pre name="code" class="java">/**选择框*/
    private void showDialog(){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setItems(new String[]{getString(R.string.profile_account_setting_photos), getString(R.string.profile_account_setting_select_pic)}, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which){
                    case PHOTO_REQUEST_CAREMA:
                        camera();
                        break;
                    case PHOTO_REQUEST_GALLERY:
                        gallery();
                        break;
                }
            }
        });
        builder.show();
    }


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值