Android:拍照,将其存储在SD卡上并覆盖它以创建更小的照片

时间:2014-06-11 18:35:43

标签: android android-image fileinputstream bitmapfactory

以下是重现此方案的代码:

  • 用户点击“拍照”按钮并拍照
  • 用户点击“创建annonce”按钮,将捕获的照片上传到服务器。

所有这些部分都运行正常,但我想解决的问题是上传图片的大小太大了:大约2Mo。

我想创建一个捕获图像的阴影副本,以便根据第一个创建较小的照片。 (如果可能的话,我们可以覆盖第一个。)

我不知道如何做到这一点,以及我的代码在哪里做到这一点?

初始化目标文件的代码:

String uniqueID = UUID.randomUUID().toString();
        String name = dateToString(new Date(),"yyyy-MM-dd-hh-mm-ss");
        imageToStore = name + uniqueID + ".jpg";
        destination = new File(Environment.getExternalStorageDirectory(), imageToStore);

当用户点击按钮时,它会开始拍照:

takePhoto.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(destination));
                startActivityForResult(intent, REQUEST_IMAGE);

                overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
            }
        });

处理捕获的代码:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if( requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK ){
            try {
                preview.setVisibility(View.VISIBLE);
                takePhoto.setVisibility(View.GONE);
                txtHaut.setText("Cette image est parfaite !");
                FileInputStream in = new FileInputStream(destination);
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 8;
                imagePath = destination.getAbsolutePath();
                Log.d("INFO", "PATH === " +imagePath);
                Bitmap bmp = BitmapFactory.decodeStream(in, null, options);
                preview.setImageBitmap(bmp);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

        }
        else{
            tvPath.setText("Request cancelled");
        }
    }

最后,当用户点击“创建annonce”按钮时,它会上传照片:

btnCreate.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog = ProgressDialog.show(New_annonce_act_step3.this, "", "Création de votre annonce en cours ..", true);

                new Thread(new Runnable() {
                    public void run() {       
                        uploadFile(imagePath);
                    }
                }).start();

            }

        });

0 个答案:

没有答案