我正在使用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;
}
这是我在服务器上获得的大小,它非常小:
以下是发送到服务器的代码:
@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;
}
答案 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