将图像发布到服务器,但大小非常小

时间:2016-10-27 05:45:11

标签: android bitmap android-volley android-bitmap

我正在使用Volley将图像发送到服务器。下面是我压缩和转换位图到字节的代码。如果指定bmp=Bitmap.createScaledBitmap(bmp,500,400, true)图像被拉伸,我想以实际尺寸发送图像。

public String getStringImage(Bitmap bmp) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] imageBytes = baos.toByteArray();
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
    return encodedImage;
}

这是我在服务器上获得的大小,它非常小:

image

以下是发送到服务器的代码:

@Override
protected Map<String, String> getParams() throws AuthFailureError {
    Map<String,String> params = new Hashtable<String, String>();
    for(int i=0; i<bitmapArray.size(); i++){
        Log.d("size of array is",String.valueOf(bitmapArray.size()));
      params.put("image"+(i+1),getStringImage(bitmapArray.get(i)));
      params.put("name"+(i+1), "name"+(i+1));
    } 
    return params; 
}

1 个答案:

答案 0 :(得分:0)

如果你使用位图返回Camera app Intent而没有传递任何文件url或uri,如下所示,它将只返回一个缩小图像位图,这是一个小尺寸的低质量图像,所以如果你调整大小,它将看起来拉伸。< / p>

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);

要获得完整质量的图像,您需要在额外提供Camera Intent文件路径,以便Camera应用程序将图像保存在那里,稍后onActivityResult您应该从文件路径读取图像并将其转换为位图,这将是一个完整的质量形象。

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);

请确保您向相机应用提供的文件路径或uri具有必要的权限。

如果您在应用中使用外部存储权限,这将很容易,否则您有办法授权相机应用。

以下是我为工作做的一个样本 - https://github.com/santbob/AppPrivateImageUpload