当前位置:首页 > 行业动态 > 正文

C#将图片和字节流互相转换并显示到页面上

C#图片和字节流互相转换并显示到页面上:该文主要介绍了在C#中实现图片与字节流相互转换,并在页面上显示的方法,包括使用MemoryStream进行转换及通过Image控件或自定义方法将图片显示到页面等。

在C#中,将图片和字节流互相转换并显示到页面上是一个常见的需求,特别是在Web开发中,以下是详细的步骤和示例代码,帮助你实现这一功能。

将图片转换为字节流

要将图片转换为字节流,可以使用System.Drawing.Common命名空间中的Image类,以下是一个简单的方法,用于将图片文件读取为字节流:

using System;
using System.Drawing;
using System.IO;
public byte[] ConvertImageToByteArray(string imagePath)
{
    using (var image = Image.FromFile(imagePath))
    {
        using (var memoryStream = new MemoryStream())
        {
            image.Save(memoryStream, image.RawFormat);
            return memoryStream.ToArray();
        }
    }
}

将字节流转换为图片

相反地,将字节流转换回图片,也可以使用Image类,以下是一个示例方法:

public Image ConvertByteArrayToImage(byte[] imageBytes)
{
    using (var memoryStream = new MemoryStream(imageBytes))
    {
        return Image.FromStream(memoryStream);
    }
}

3. 在ASP.NET Core中显示图片

C#将图片和字节流互相转换并显示到页面上

在ASP.NET Core中,你可以使用IFormFile接口来处理上传的图片文件,并将其显示在页面上,以下是一个完整的示例,包括控制器和视图:

Controller(控制器)

using Microsoft.AspNetCore.Mvc;
using System.Drawing;
using System.IO;
public class ImageController : Controller
{
    [HttpPost]
    public IActionResult UploadImage(IFormFile file)
    {
        if (file == null || file.Length == 0)
            return Content("file not selected");
        var path = Path.Combine(
            Directory.GetCurrentDirectory(), "wwwroot", "uploads", file.FileName);
        using (var stream = new FileStream(path, FileMode.Create))
        {
            file.CopyTo(stream);
        }
        var imageBytes = ConvertImageToByteArray(path);
        ViewBag.ImageData = imageBytes;
        ViewBag.ImageMimeType = file.ContentType;
        return View("DisplayImage");
    }
    [HttpGet]
    public IActionResult DisplayImage()
    {
        return View();
    }
}

View(视图)

Views/Image/DisplayImage.cshtml文件中,添加以下代码以显示图片:

@{
    var base64 = Convert.ToBase64String((byte[])ViewBag.ImageData);
    var imgSrc = string.Format("data:image/{0};base64,{1}", ViewBag.ImageMimeType, base64);
}
<img src="@imgSrc" alt="Uploaded Image" />

完整示例项目结构

你的项目结构可能如下所示:

C#将图片和字节流互相转换并显示到页面上

YourProject/
│
├── Controllers/
│   └── ImageController.cs
│
├── Views/
│   └── Image/
│       └── DisplayImage.cshtml
│
└── wwwroot/
    └── uploads/

FAQs

Q1: 如果上传的图片非常大,如何处理内存问题?

A1: 对于大图片,可以考虑使用分块读取的方式,而不是一次性将整个图片加载到内存中,可以使用图像压缩技术来减小图片的大小。

Q2: 如何在不保存到磁盘的情况下直接处理图片?

C#将图片和字节流互相转换并显示到页面上

A2: 你可以直接从IFormFile接口读取数据流,然后将其转换为字节数组,而无需先保存到磁盘。

using (var memoryStream = new MemoryStream())
{
    file.CopyTo(memoryStream);
    var imageBytes = memoryStream.ToArray();
    // 继续处理字节数组...
}

小编有话说

通过上述步骤,你可以轻松地在C#中实现图片和字节流之间的转换,并在ASP.NET Core应用程序中显示图片,无论是处理用户上传的图片还是动态生成图片,这些技术都能帮助你更高效地完成任务,希望这篇教程对你有所帮助!