为啥base64图像很大? xamarin 形式

Posted

技术标签:

【中文标题】为啥base64图像很大? xamarin 形式【英文标题】:Why base64 image is big ? xamarin forms为什么base64图像很大? xamarin 形式 【发布时间】:2017-09-06 17:53:38 【问题描述】:

当我尝试从用户图库中获取图片时,有时会遇到一个错误。 我在 Stream 对象中获取图片,将其转换为 base64,然后使用 post 函数发送它。 有时程序说图像路径很大,因此无法发送 url。 我听说这是导致图像大小的原因,但我不确定... 有人知道真正导致大 base64 字符串的原因吗?我该如何解决?

【问题讨论】:

它是一种将 3 字节转换为 4 字节的编码格式。膨胀是预期的。您可能需要在客户端级别为您的图像实施某种程度的压缩 - 或更新您的在线 api 以部分接受较大的文件!比如接受多部分请求。 【参考方案1】:

您可以按照类似的方式进行操作:

http://jamessdixon.wordpress.com/2013/10/01/handling-images-in-webapi/

也许你需要像这样在你的 web api 中做一些改变:

[HttpPost]
   public HttpResponseMessage UploadImage(int ID)
   
       var result = new HttpResponseMessage(HttpStatusCode.OK);
       if (Request.Content.IsMimeMultipartContent())
       
           Request.Content.LoadIntoBufferAsync().Wait();
           Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider()).ContinueWith((task) =>
           
               MultipartMemoryStreamProvider provider = task.Result;
               foreach (HttpContent content in provider.Contents)
               
                  Stream stream = content.ReadAsStreamAsync().Result;
                  Image image = Image.FromStream(stream);
                  var testName = content.Headers.ContentDisposition.Name;
                  String filePath = HostingEnvironment.MapPath("~/Content/");
                  String fullPath = Path.Combine(filePath, ID.ToString()+".jpg");
                  image.Save(fullPath);
               
           );
          return result;
       
       else
       
           throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
       

   

确保您的 api 网络运行良好后,您应该将 Stream 更改为 byte[]

在你的 Xamarin 代码中试试这个:

  public async Task PostItem(String Controller, String Method, int ID, byte[] item) 
  
      using (var client = CreateClient ()) 
      var da = new ByteArrayContent(item);

        try
            var multi = new MultipartContent();
            multi.Add(da);
            var response = await client.PostAsync (Controller + "/" +Method + "/?ID=" +ID, multi);
        catch(Exception ex)
        
           Console.Write(ex.Message);
        
    

更多信息见MultipartContent类文档

【讨论】:

以上是关于为啥base64图像很大? xamarin 形式的主要内容,如果未能解决你的问题,请参考以下文章

IDEA插件系列(87):Base64 image encoder插件——以base64编码的形式查看图像

为啥要用base64编码来保存图片?

图像不显示 Xamarin.Forms

为啥Bitmap to Base64 String在android的webview上显示黑色背景?

使用Image header() & readfile()在PHP页面上显示一个Base64图像。

显示大型 Base64 图像 MVC 4 DOTNET