编码为旋转 90 度的 base64 图像后
Posted
技术标签:
【中文标题】编码为旋转 90 度的 base64 图像后【英文标题】:After Encode to base64 image rotated by 90 degres 【发布时间】:2016-06-11 04:00:23 【问题描述】:在我的应用程序中,我正在将图像上传到服务器。我从我的 WP 8.1 编码图像并将其发送到服务器。发送和接收工作正常,但图像有问题。我不知道为什么,但我上传的解码后拍摄的肖像图像是这张旋转了90度的图像。风景图像很好,但人像旋转了。这是我的编码和解码代码
编码:
private async Task<string> StorageFileToBase64(StorageFile file)
string Base64String = "";
if (file != null)
IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read);
var reader = new DataReader(fileStream.GetInputStreamAt(0));
await reader.LoadAsync((uint)fileStream.Size);
byte[] byteArray = new byte[fileStream.Size];
reader.ReadBytes(byteArray);
Base64String = Convert.ToBase64String(byteArray);
return Base64String;
在服务器上解码图像
public void ShowImg(string b64)
byte[] imageBytes = Convert.FromBase64String(b64);
// Convert byte[] to Image
var ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms, true);
f.pictureBox1.Image = image;
【问题讨论】:
Landscapes images are good, but portrait are rotated.
如果您没有为它做任何特别的事情,那么您为什么认为您的代码是问题所在。也许这就是服务器处理你的图像的方式......
解码图片时可以旋转吗? How do I rotate a picture in C#
是的,但我不知道上传的图片是横向还是纵向
您找到解决方案了吗?我看到了同样的问题。谢谢
【参考方案1】:
string startExpression = "data:image/png;base64,";
using (var ms = new MemoryStream())
ms.Flush();
System.Drawing.Image imageIn = System.Drawing.Image.FromFile(fileName);
ms.Position = 0;
imageIn.RotateFlip(System.Drawing.RotateFlipType.Rotate90FlipX);
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
var bytes= ms.ToArray();
string fileBase = Convert.ToBase64String(bytes);
var base64= startExpression + fileBase;
imageIn.Dispose();
ms.Dispose();
【讨论】:
希望它能解决问题,但请添加对代码的解释,以便用户完全理解他/她真正想要的。以上是关于编码为旋转 90 度的 base64 图像后的主要内容,如果未能解决你的问题,请参考以下文章
将 Base64 编码图像加密为另一个有效的 Base64 编码图像