C#中图片、二进制数据与字符串的相互转换方法

竹里
竹里
发布时间:2026-10-13 | 4人浏览过
原创

在C#应用开发中经常需要将图片资源转换为二进制数据进行存储或传输,或者转换为Base64字符串以便嵌入HTML/JSON。本文将提供从本地文件读取图片为二进制流、转换为字符串,以及如何将字符串还原为二进制并生成图片文件的完整C#代码实现。

核心转换逻辑概览

C#中进行此类转换的核心在于对字节数组(byte[])的操作。通常涉及三个关键步骤:

  1. 图片转二进制:通过文件流或内存流读取图片内容到字节数组。
  2. 二进制转字符串:使用 Convert.ToBase64String 将字节数组编码为安全的文本字符串。
  3. 字符串转图片:先解码字符串为字节数组,再通过 MemoryStream 和 System.Drawing.Image.FromStream 恢复为图像对象。

第1步:图片转为二进制数据

目的:将磁盘上的图片文件读取为可处理的字节数组。

入口:需要指定图片的完整文件路径。

重要参数:imagepath 字符串类型的文件路径。

代码实现:

using System.IO;
using System.Drawing;

/// 
/// 根据图片文件的路径使用文件流打开,并保存为byte[]
/// 
/// 图片地址
/// 图片对应的二进制数组
public byte[] GetPictureData(string imagepath)
{
    // 以只读模式打开文件流
    FileStream fs = new FileStream(imagepath, FileMode.Open);
    byte[] byData = new byte[fs.Length];
    // 将文件内容读取到字节数组中
    fs.Read(byData, 0, byData.Length);
    fs.Close();
    return byData;
}

完成状态:函数返回一个包含图片全部数据的 byte[] 对象。

第2步:图片转为Base64字符串

目的:将二进制数据安全地表示为纯文本,便于网络传输或数据库存储。

入口:调用已获取的二进制数组或上述方法的结果。

操作:直接调用 .NET 内置的 Convert 类方法进行编码。

// 假设 imageByte 是已获取的图片二进制数据
byte[] imageByte = GetPictureData("./uploadfile/111.png");

// 二进制转换成字符串
string picStr = Convert.ToBase64String(imageByte);

完成状态:picStr 变量中包含标准的 Base64 编码文本。

第3步:Base64字符串还原为图片并保存

目的:将接收到的字符串再次解析回图像格式并保存至本地。

入口:持有 Base64 字符串。风险提示:确保源字符串未被截断或损坏,否则可能导致解码异常或生成的图片无法显示。

操作顺序:

  1. 解码:使用 Convert.FromBase64String 将字符串转回字节数组。
  2. 构建流:将字节数组包装进 MemoryStream。
  3. 生成图像:调用 Image.FromStream 创建 Image 实例。
  4. 保存:调用 Save 方法写入磁盘。
// 字符串转二进制
byte[] imageBytes = Convert.FromBase64String(picStr);

// 读入MemoryStream对象
using (MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
    // 二进制转成图片保存
    System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream);
    image.Save(Server.MapPath("./uploadfile/222.png"));
}

完成状态:指定路径下生成新的图片文件 222.png,内容与原图一致。

辅助方法:Image对象转二进制

如果手中已有 System.Drawing.Image 对象而非文件路径,可以通过以下方法直接转换为二进制流:

public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto)
{
    // 将Image转换成流数据,并保存为byte[]
    using (MemoryStream mstream = new MemoryStream())
    {
        // 建议指定格式,如 BMP, PNG 等,此处以BMP为例
        imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
        byte[] byData = new Byte[mstream.Length];
        mstream.Position = 0;
        mstream.Read(byData, 0, byData.Length);
        return byData;
    }
}

总结

C#处理图片与字符串的转换主要依赖 System.IO 命名空间下的流类与 Convert 类。对于频繁转换的场景,建议使用 using 语句块自动管理流资源的释放,防止内存泄漏。以上就是C#中图片、二进制与字符串的相互转换方法的详细内容,更多关于C#图像处理及数据转换的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表