如何调整在Android上拍摄的照片的大小?

时间:2017-01-20 03:21:22

标签: android

我想将带有multipart / form-data的照片发送到服务器。

当然,所有过程都进展顺利。

我在onActivityResult上得到了图片的绝对路径。我将它发送到AsyncTask类,将其更改为File对象。然后,我使用FileInputStream将图片发送到服务器。

这是我发送图片的代码。

MainActivity:

 public void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);

    if(resultCode != RESULT_OK)
        return;

    if(requestCode == PICK_FROM_CAMERA){
        // uri of selected picture
        imageUri = data.getData();


        // path of selected picture
        Cursor c = this.getContentResolver().query(imageUri, null, null, null, null);
        c.moveToNext();
        absolutePath = c.getString(c.getColumnIndex(MediaStore.MediaColumns.DATA));

        Glide.with(this).load(imageUri).into(image);
    }
}

Asynctask类: absolutePath在params [7]

 FileInputStream fileInputStream ;
        wr.writeBytes("\r\n--" + boundary + "\r\n");
        wr.writeBytes("Content-Disposition: form-data; name=\"file1[]\"; " +
                "filename=\"image.jpg\"\r\n");
        wr.writeBytes("Content-Type: application/octet-stream\r\n\r\n");
        fileInputStream = new FileInputStream(params[7]);

当我发送图片时,我只是发送它而不调整大小。 完成发送需要花费太多时间和数据。 我想在发送到服务器时缩小图片。 也就是说,使用绝对路径,我想制作可以转换为File对象的较小图片。

任何人都可以给我一些提示吗?

2 个答案:

答案 0 :(得分:0)

您可以将imageFile存储为Uri变量,然后根据所需的宽度和高度调整图像大小以进行压缩。

     Bitmap b = BitmapFactory.decodeFile(String.valueOf(fileUri));
     Bitmap out = Bitmap.createScaledBitmap(b, IMG_WIDTH, IMG_HEIGHT, false);
     FileOutputStream fOut;

     try {
            fOut = new FileOutputStream(fileUri);
            out.compress(Bitmap.CompressFormat.JPEG, 60, fOut);
            fOut.flush();
            fOut.close();
            b.recycle();
            out.recycle();
            Log.i("Compressing file", String.valueOf(uriFile));
      } catch (Exception e) {
            Log.e("ErrInCompressingPicture",""  + e);
      }

答案 1 :(得分:0)

您可以压缩发送到服务器之前的图片!

直接在SampleSize中设置一个解决方案:

  public static Bitmap getImage(String imgPath){
      BitmapFactory.Options options=new BitmapFactory.Options();
      options.inSampleSize=2;
      try {
          b=BitmapFactory.decodeFile(imgPath, options);
      } catch (Exception e) {
              e.printStackTrace();
      }
      return b;
 }

另一个解决方案是设置你想要的宽度和高度:

public static Bitmap getSmallBitmap(String imgPath,int reWidth,int reHeight) {
     BitmapFactory.Options options = new BitmapFactory.Options();
     options.inJustDecodeBounds = true;
     BitmapFactory.decodeFile(imgPath, options);
     int width = options.outWidth;
     int height = options.outHeight;
     int inSampleSize=0;
     if (height > reqHeight || width > reqWidth) {
         final int heightRatio = Math.round((float) height/ (float) reqHeight);
         final int widthRatio = Math.round((float) width / (float) reqWidth);
         inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }
     options.inSampleSize = inSampleSize;
     options.inJustDecodeBounds = false;
     return BitmapFactory.decodeFile(imgPath, options);
  }