编码为旋转 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 图像后的主要内容,如果未能解决你的问题,请参考以下文章

将图像旋转 90 度的算法? (没有额外的内存)

Leecode-48:旋转图像(矩阵顺时针旋转90度)

旋转base64字符串Nativescript-Vue

将 Base64 编码图像加密为另一个有效的 Base64 编码图像

OpenCV图像旋转90度函数cv2.transpose导致镜像翻转

matlab中figure的图像旋转