取消

图片保存到流报错

图片保存到流报错


问题

问题见如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
void Main()
{
  //把图片转为byte后用base64编码,再把base64编码转为byte报错
  var image = LoadImage(@"d :/1.jpg");
  // string strBase64 = Convert.ToBase64String(ImageToByteArray(image));
  // image.Dispose();
  // var image2 = FromBase64(strBase64);
  var bytes1 = ImageToByteArray(image);//这里转byte不会报错
  var image2 = ByteArrayToImage(bytes1);
  var bytes = ImageToByteArray(image2);//这里转byte会报错
}



public Image LoadImage(string strFile)
{
  var image = Image.FromFile(strFile);
  return image;
}

public Image FromBase64(string strFile)
{
  byte[] bytes = Convert.FromBase64String(strFile);
  Image image = ByteArrayToImage(bytes);
  return image;
}

public static byte[] ImageToByteArray(Image image)
{
  using (MemoryStream ms = new MemoryStream()){
    Debug.WriteLine(image.RawFormat);
    image.Save(ms,image.RawFormat);//任何图片都会报错,即使image. RawFormat格式是jpgl
    //image.Save(ms,ImageFormat. Png);//如果用这句不会报错,不知原因,即使图片不是PNG格式
    return ms.ToArray();
  }
}

public static Image ByteArrayToImage(byte[] bytes)
{
  if (bytes == null)
  {
    return null;
  }
  using (MemoryStream ms = new MemoryStream(bytes))
  {
    return Image.FromStream(ms);
  }
}

解决

正在探索……

原因

正在探索……


参考资料

本文会经常更新,请阅读原文: https://dashenxian.github.io/post/%E5%9B%BE%E7%89%87%E4%BF%9D%E5%AD%98%E5%88%B0%E6%B5%81%E6%8A%A5%E9%94%99 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com)

登录 GitHub 账号进行评论