我正在研究一个将照片拍照并将其转换为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();
,但是那也不起作用。
这太奇怪了,我以前从来没有反驳过。
答案 0 :(得分:0)
您尝试过旧的IO.MemoryStream
而不是.ConvertToBytes()
吗?
byte[] bytes;
using (var memoryStream = new System.IO.MemoryStream())
{
photo.GetStream().CopyTo(memoryStream);
bytes = memoryStream.ToArray();
}
答案 1 :(得分:0)
问题出在插件上。我正在使用MediaPlugin,不得不使用其他getstream方法
var bytes = await photo.GetStreamWithImageRotatedForExternalStorage().ConvertToBytes();
var base64string = Convert.ToBase64String(bytes);
return base64string