Размер изображения становится слишком маленьким после сжатия - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь отправить изображение на сервер путем преобразования в строку 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;
}

Код сервера:

    [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 голосов
/ 30 мая 2018

Вы можете использовать приведенный ниже код.Я реализовал ту же функциональность.Я получаю изображение из галереи и преобразую путь в байтовом массиве.Передайте imagepath на ваш сервер.selectedImage - это 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();
        }
0 голосов
/ 30 мая 2018

Фрагмент кода кажется действительно хорошим.Это может преобразовать изображение в base64.

Я думаю, у вас может быть 3 возможных проблемы.

  1. Проблема переноса при конвертации (Вы пытались)

Используйте Base64.NO_WRAP вместо Base64.DEFAULT

Ваш код сервера может иметь проблемы при преобразовании base64 в изображение.

Вы можете контролировать или передавать свой код на стороне сервера.

Пока функция работает, ваше растровое изображение уже слишком мало.
...