压缩后图像尺寸变得太小

时间:2018-05-30 12:16:14

标签: android image file-upload android-volley

我试图通过转换为Base64字符串将图像发送到服务器,但是在服务器端压缩图像变得太小之后。

Image become too small

代码:

public String getEncoded64ImageStringFromBitmap(Bitmap bitmap) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byteFormat = stream.toByteArray();
    // get the base 64 string
    String imgString = Base64.encodeToString(byteFormat, Base64.DEFAULT);
    return imgString;
}

Serverside代码:

    [AllowAnonymous]
    [HttpPost]
    public IHttpActionResult UploadFile()
    {
        string filePath = "No File Uploaded"; 
        HttpRequest httpRequest = HttpContext.Current.Request;
        var fileData = httpRequest.Form["fileData"];
        try
        {
            string lUniqueId = DateTime.Now.ToString("ddMMyyyyHHmmssff");
            string lFileName = lUniqueId + ".jpeg";
            filePath = "~/Uploads/AadharCards/" + lFileName;

            byte[] imageBytes = Convert.FromBase64String(fileData);
            //Save the Byte Array as File.
            File.WriteAllBytes(System.Web.Hosting.HostingEnvironment.MapPath(filePath), imageBytes);
            return Ok(filePath);
        }
        catch (Exception)
        {
            return Ok(false);
        }
    }

2 个答案:

答案 0 :(得分:0)

代码段似乎非常好。这可以将图像转换为base64。

我认为你可能有3个问题。

  1. 转换时包装问题(您尝试过)
  2.   

    使用Base64.NO_WRAP代替Base64.DEFAULT

    1. 将base64转换为图像时,您的服务器代码可能存在问题。
    2.   

      您可以控制或共享服务器端代码。

      1. 当功能正常时,您的位图已经太小了。

答案 1 :(得分:0)

您可以使用以下代码。我已经实现了相同的功能。我从Gallery获取图像并转换字节数组中的路径。将imagepath传递给您的服务器。 selectedImage是Gallery的URI路径。

    public static byte[] bitmapdata;
    private static String imagepath;


 Bitmap bitmap = BitmapFactory.decodeFile(selectedImage.toString());
                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                    bitmapdata = resizeImage(stream.toByteArray());

                    imagepath = Base64.encodeToString(bitmapdata, Base64.DEFAULT);

/* Resize Image */
        byte[] resizeImage(byte[] input) {
            Bitmap original = BitmapFactory.decodeByteArray(input, 0, input.length);
            Bitmap resized = Bitmap.createScaledBitmap(original, 400, 480, true);

            ByteArrayOutputStream blob = new ByteArrayOutputStream();
            resized.compress(Bitmap.CompressFormat.JPEG, 50, blob);

            return blob.toByteArray();
        }