我可以';t使用Image to Base64 String函数

本文关键字:to Base64 String 函数 Image 使用 我可以 | 更新日期: 2023-09-27 18:25:17

我正在制作多客户端聊天服务器(完成)。

但我想添加图片发送。我在发送消息时使用了这种方法客户端1写入消息并获取字节->服务器->获取字符串

所以我是这样编码的(我不能这部分)加载image->ImageToBase64(image)->getbyte-->服务器-->getstring->Base64ToImage客户端发送部件

我怎样才能使用这个函数,这个方法才能运行。

 private void button1_Click(object sender, EventArgs e)
 {
    Image screen;
    screen=Image.FromFile("C:''Users''User''Desktop''Paint.bmp");
    screentext = ImageToBase64(screen); //actually I do not know what parameter should be here
    StreamWriter wrthr = new StreamWriter(@"C:'Users'User'Desktop'giden.txt");
    wrthr.Write(screentext); 
    wrthr.Close(); // result empty txt
    }


public string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format)
{
  using (MemoryStream ms = new MemoryStream())
  {
    // Convert Image to byte[]
    image.Save(ms, format);
    byte[] imageBytes = ms.ToArray();
    // Convert byte[] to Base64 String
    string base64String = Convert.ToBase64String(imageBytes);
    return base64String;
  }
}

public Image Base64ToImage(string base64String)
{
  // Convert Base64 String to byte[]
  byte[] imageBytes = Convert.FromBase64String(base64String);
  MemoryStream ms = new MemoryStream(imageBytes, 0, 
    imageBytes.Length);
  // Convert byte[] to Image
  ms.Write(imageBytes, 0, imageBytes.Length);
  Image image = Image.FromStream(ms, true);
  return image;
}

我可以';t使用Image to Base64 String函数

编辑:这里有两个问题。。。

选择ImageToBase64的第二个参数

这取决于你——你想把它作为BMP文件保存吗?如果是这样的话,你根本不需要通过Image。。。只需从Paint.bmp加载字节,并将它们直接转换为Base64:

byte[] bytes = File.ReadAllBytes(@"C:'Users'User'Desktop'Paint.bmp");
File.WriteAllText(@"C:'Users'User'Desktop'giden.txt",
                  Convert.ToBase64String(bytes));

或者您可能希望选择不同的格式,例如PNG或JPEG,例如

string screentext = ImageToBase64(screen, ImageFormat.Png);

(目前还不清楚screentext是在哪里声明的,但它几乎肯定是一个局部变量。)

正在从base64转换

这就是问题所在:

MemoryStream ms = new MemoryStream(imageBytes, 0, 
  imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);

你不需要Write调用,它在这里是有害的:

  • 您已经用imageBytes构造了MemoryStream,所以它已经包含了该数据
  • 通过写入流,您已经将"光标"移动到了末尾。。。所以没有什么可读的

只需使用:

public Image Base64ToImage(string base64String)
{
  // Convert Base64 String to byte[]
  byte[] imageBytes = Convert.FromBase64String(base64String);
  MemoryStream ms = new MemoryStream(imageBytes);
  return Image.FromStream(ms, true);
}