You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6 Web API中如何用SixLabors.ImageSharp获取像素并生成图片

使用SixLabors.ImageSharp提取图片RGB像素数据(不保存文件到服务器)

核心思路

完全在内存中处理上传的图片,用SixLabors.ImageSharp加载后直接遍历提取RGB像素值,全程不将文件写入服务器磁盘,规避病毒风险。

前置准备

确保项目已安装SixLabors.ImageSharp NuGet包:

dotnet add package SixLabors.ImageSharp

实现代码

替换你原来的接口逻辑,改为提取像素数据的逻辑:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;

[ApiController]
[Route("[controller]")]
public class ImageController : ControllerBase
{
    [HttpPost("GetPixelData")]
    public async Task<IActionResult> GetPixelData([FromForm] IFormFile file)
    {
        if (file == null || file.Length == 0)
        {
            return BadRequest("未上传有效图片文件");
        }

        // 将上传文件读入内存流
        await using var memoryStream = new MemoryStream();
        await file.CopyToAsync(memoryStream);
        memoryStream.Position = 0; // 重置流指针到起始位置

        // 以Rgba32格式加载图片(包含RGB和Alpha通道,方便提取RGB)
        using var image = Image.Load<Rgba32>(memoryStream);

        // 初始化存储像素数据的二维数组
        var pixelData = new int[image.Height][];
        for (int y = 0; y < image.Height; y++)
        {
            pixelData[y] = new int[image.Width];
            // 高效遍历当前行的所有像素
            image.ProcessPixelRows(accessor =>
            {
                var rowSpan = accessor.GetRowSpan(y);
                for (int x = 0; x < image.Width; x++)
                {
                    Rgba32 pixel = rowSpan[x];
                    // 将RGB值打包为整数(格式:R<<16 | G<<8 | B),也可单独存储R/G/B值
                    int rgbValue = (pixel.R << 16) | (pixel.G << 8) | pixel.B;
                    pixelData[y][x] = rgbValue;
                }
            });
        }

        // 返回包含尺寸和像素数据的结果,后续可根据此数据重新生成图片
        return Ok(new
        {
            Width = image.Width,
            Height = image.Height,
            RgbPixelData = pixelData
        });
    }
}

关键说明

  1. 像素访问方式:使用ProcessPixelRows是ImageSharp推荐的高效像素遍历方式,比逐个像素索引访问性能更优。
  2. 像素格式选择:指定Rgba32格式可以直接获取每个像素的R、G、B、Alpha通道值,按需提取RGB即可。
  3. 数据存储灵活:如果不需要打包为整数,也可以用自定义类或多维数组分别存储每个像素的R、G、B数值。
  4. 无磁盘写入:整个流程仅在内存中处理上传文件,不会将任何文件保存到服务器磁盘,彻底规避病毒文件落地风险。

内容的提问来源于stack exchange,提问作者Ramin Azali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:15:26