我正在研究一个拍摄照片并将其转换为base64字符串的函数。但出于某种原因,我试着查找这个,Convert.ToBase64String
总是将我的图像逆时针旋转 90 度。我试过查找这个,但找不到任何有类似问题的人。这是代码
private async Task<string> GetPhotoBase64StringAsync(int compressionQuality = 50, PhotoSize photoSize = PhotoSize.Medium)
{
string filename = $"{DateTime.Now.ToString("MMddyyyy_Hmmtt")}.jpg";
var photo = await UtilityService.OpenCameraAsync(filename, compressionQuality, photoSize);
if (photo != null)
{
var bytes = await photo.GetStream().ConvertToBytes();
var base64string = Convert.ToBase64String(bytes);
return base64string
}
return string.Empty;
}
photo
是由 IM 使用的 xamarin 插件返回的对象。 我知道一个事实,该插件以正确的方向返回图像,因为我之后显示并且它没有旋转。
当我将图像转换为流以及从流转换为 base64 时,就会出现问题。如果我在return base64string
放置一个断点并将 base64 字符串复制并粘贴到在线 base64 进行图像转换,图像将逆时针旋转 90 度。
我也试过 var base64string = bytes.ToBase64String();
但那也不起作用。
这太奇怪了,我以前从未反驳过这一点。
您是否尝试过旧的IO.MemoryStream
而不是.ConvertToBytes()
?
byte[] bytes;
using (var memoryStream = new System.IO.MemoryStream())
{
photo.GetStream().CopyTo(memoryStream);
bytes = memoryStream.ToArray();
}
问题出在插件上。我正在使用媒体插件,不得不使用其他获取流方法
var bytes = await photo.GetStreamWithImageRotatedForExternalStorage().ConvertToBytes();
var base64string = Convert.ToBase64String(bytes);
return base64string