Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 压缩后图像大小变得太小_Android_Image_File Upload_Android Volley - Fatal编程技术网

Android 压缩后图像大小变得太小

Android 压缩后图像大小变得太小,android,image,file-upload,android-volley,Android,Image,File Upload,Android Volley,我试图通过转换为Base64字符串将图像发送到服务器,但压缩后,图像在服务器端变得太小 代码: 服务器端代码: [AllowAnonymous] [HttpPost] public IHttpActionResult UploadFile() { string filePath = "No File Uploaded"; HttpRequest httpRequest = HttpContext.Current.Request;

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

代码:

服务器端代码:

    [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);
        }
    }

代码片段看起来真的很好。这可以将图像转换为base64

我想你可能有三个问题

  • 转换时包装问题(已尝试)
  • 使用
    Base64.NO_WRAP
    代替
    Base64.DEFAULT

  • 将base64转换为映像时,服务器代码可能会出现问题 您可以控制或共享服务器端代码

  • 函数运行时,位图已经太小
    您可以使用下面的代码。我已经实现了相同的功能。我从Gallery中获取图像并转换字节数组中的路径。将imagepath传递到服务器。 SelecteImage是库的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();
            }
    

    静止图像太小。编码后是否尝试解码图像?可能是服务器问题,因为您的代码似乎正确?
    试图通过转换为Base64字符串将图像发送到服务器,但压缩后图像在服务器端变得太小。
    请告知原始图像的分辨率。然后在客户机上解析调整大小的图像。然后是服务器上图像的分辨率。
    压缩后图像大小变得太小
    我认为您的位图在压缩前已经太小了。请告诉bmp.getWidth()和bmp.getHeight()。你从哪里开始得到位图?原始图像2448 x 3264服务器图像427 x 60I要求三种分辨率。如何将此图像保存为原始大小?要保存图像,你必须在服务器端执行一个代码,然后他们创建imageurl。使用Picaso或glide库使用imageurl从服务器下载。不,不,我的意思是你提到了400480大小。我想保存原始图像。从resizeImage方法中删除下一行,并传递原始位图对象,而不是在compress方法中调整大小。Bitmap resized=Bitmap.createScaledBitmap(原始,400480,真);但这就是我想要上传的图像变得太小的实际问题
        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();
            }