为啥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编码的形式查看图像
为啥Bitmap to Base64 String在android的webview上显示黑色背景?