Xamarin.Forms拍照上传后Xamarin.Forms.Image转System.Drawing.Image问题
Xamarin.Forms拍照上传并服务端转System.Drawing.Image解决方案
一、移动端Xamarin侧正确获取照片字节流
- 首先明确:Xam.Plugin.Media拍照返回的是
MediaFile类型实例,不是直接Xamarin.Forms.Image,不要先转成Image控件再转字节流,避免篡改原始图片编码导致服务端识别失败 - 拍照后直接从
MediaFile读取原始流转字节数组上传即可,参考代码:
// 拍照核心逻辑 var photo = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions { SaveToAlbum = false, CompressionQuality = 80 // 可自定义压缩质量,取值范围0-100 }); if (photo == null) return; // 直接转字节数组,跳过Xamarin.Forms.Image转换步骤 byte[] imageBytes; using (var stream = photo.GetStream()) using (var ms = new MemoryStream()) { stream.CopyTo(ms); imageBytes = ms.ToArray(); } // 此处直接将imageBytes上传至服务端即可
二、服务端字节流转System.Drawing.Image
- 若服务端部署在Windows环境,直接安装
System.Drawing.CommonNuGet包后用以下代码转换:
// 服务端接收字节数组后的转换逻辑 public System.Drawing.Image BytesToImage(byte[] imageBytes) { using(var ms = new MemoryStream(imageBytes)) { return System.Drawing.Image.FromStream(ms); } }
- 若服务端部署在Linux/macOS环境,
System.Drawing.Common从.NET 6开始仅支持Windows,可替换为跨平台图像处理库如ImageSharp,直接从字节数组加载图片即可,逻辑与上述代码类似
内容的提问来源于stack exchange,提问作者Marcelo Camarate
相关产品推荐
相关产品推荐

