如何将相机拍摄的图像以实际尺寸发送到服务器?

时间:2018-06-19 11:43:42

标签: java android android-camera android-camera-intent

它以低质量压缩,但我想发送高质量图像

         bitmap = BitmapFactory.decodeFile(str);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 40, stream);
        byte[] byte_v = stream.toByteArray();
        if(bitmap!=null)
        {
            bitmap.recycle();
        }

        encod = Base64.encodeToString(byte_v,Base64.DEFAULT);
        ImageMulti();

    }

2 个答案:

答案 0 :(得分:1)

设置100个实例中的40个

 bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);

答案 1 :(得分:0)

  

如果要将实际拍摄的相机图像拍摄到服务器,则需要创建   图片

尝试此代码

Delcare这个变量

private String actualPictureImagePath = "";

然后在点击按钮cameraIntent()上调用此方法

private void cameraIntent() {
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = timeStamp + ".jpg";
    File storageDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);
    actualPictureImagePath = storageDir.getAbsolutePath() + "/" + imageFileName;
    File file = new File(pictureImagePath);
    Uri outputFileUri = Uri.fromFile(file);
    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);               
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
    startActivityForResult(cameraIntent, 1);
}

然后在onActivityResult()中处理

@override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
    File imgFile = new  File(actualPictureImagePath);
        if(imgFile.exists()){        
       Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
       // Now use this bitmap to send to server 
       // Code to convert bitmap to Base64 
      ByteArrayOutputStream baos = new ByteArrayOutputStream();  
      myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm 
      is the bitmap object   
      byte[] byteArrayImage = baos.toByteArray(); 
      String encodedImage = Base64.encodeToString(byteArrayImage, 
      Base64.DEFAULT);

        }
    }

}

替代方案

@override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 1) {
        File imgFile = new  File(actualPictureImagePath);
            if(imgFile.exists()){        
          InputStream inputStream = null;//You can get an inputStream using any IO API
inputStream = new FileInputStream(imgFile.getAbsolutePath());
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
Base64OutputStream output64 = new Base64OutputStream(output, Base64.DEFAULT);
try {
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        output64.write(buffer, 0, bytesRead);
    }
} catch (IOException e) {
    e.printStackTrace();
}
output64.close();

String base64String = output.toString();

            }
        }

    }

这是用于位图到Base64的代码

ByteArrayOutputStream baos = new ByteArrayOutputStream();  
          myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm 
          is the bitmap object   
          byte[] byteArrayImage = baos.toByteArray(); 
          String encodedImage = Base64.encodeToString(byteArrayImage, 
          Base64.DEFAULT);

替代解决方案

注意:-

  

别忘了添加运行时权限,并且也在清单中

1)读写权限

2)摄像机权限