ASP.NET Core SixLabors.ImageSharp 位图图像创建和下载

从 MVC 控制器内部创建位图图像并将其发送到浏览器;用 C# 编写并与 Linux 和 Windows 服务器兼容。

使用从 ASP.NET MVC 中的控制器下载任何文件类型File。

此示例创建一个位图 (jpeg) 并将其发送到浏览器。它需要 NuGet 包SixLabors.ImageSharp v1.0.4。

另请参阅:SixLabors.ImageSharp 图像实用程序类

另请参阅:将文件上传到浏览器后删除

下面的代码将创建以下四幅图像并在它们之间交替显示:

修改后的HomeController.cs文件:

// HomeController.cs

using Microsoft.AspNetCore.Mvc;

using SixLabors.ImageSharp;

using SixLabors.ImageSharp.PixelFormats;

namespace WebApplication1.Controllers

{

public class HomeController : Controller

{

static private byte mod(int x, int y) // NOTE: only returns values 0 to 255

{

if ((y & 1) == 0) // NOTE: then base of 2 - no need for division

return (byte)(x & (y - 1));

else

return (byte)(x % y);

}

static private void Image0(Image<Rgb24> bmp) // NOTE: this will create a colorful bitmap with colorful stars

{

// NOTE: loop through every pixel of the bitmap

for (int x = 0; x < bmp.Width; x++)

for (int y = 0; y < bmp.Height; y++)

{

byte p = (byte)(x * y >> 8), c = mod(p, 3), z = 255; // NOTE: "z" can be any shade between 0 and 255

bmpx, y = new Rgb24(c == 0 ? p : z, c == 1 ? p : z, c == 2 ? p : z); // NOTE: set the color of the pixel at (x, y)

}

}

static private void Image1(Image<Rgb24> bmp) // NOTE: this will create a bitmap with a pattern that repeats

{

// NOTE: loop through every pixel of the bitmap

for (int x = 0; x < bmp.Width; x++)

for (int y = 0; y < bmp.Height; y++)

{

byte p = mod(x * y, 256), c = mod(p, 3), z = 0; // NOTE: "z" can be any shade between 0 and 255

bmpx, y = new Rgb24(c == 0 ? p : z, c == 1 ? p : z, c == 2 ? p : z); // NOTE: set the color of the pixel at (x, y)

}

}

static private void Image2(Image<Rgb24> bmp) // NOTE: this will create a bitmap with a unique diagonal pattern

{

// NOTE: loop through every pixel of the bitmap

for (int x = 0; x < bmp.Width; x++)

for (int y = 0; y < bmp.Height; y++)

{

byte p = mod(x, y), c = mod(p, 3), z = 127; // NOTE: "z" can be any shade between 0 and 255

bmpx, y = new Rgb24(c == 0 ? p : z, c == 1 ? p : z, c == 2 ? p : z); // NOTE: set the color of the pixel at (x, y)

}

}

static private void Image3(Image<Rgb24> bmp) // NOTE: this will create a bitmap of noise

{

var rand = new Random();

// NOTE: loop through every pixel of the bitmap

for (int x = 0; x < bmp.Width; x++)

for (int y = 0; y < bmp.Height; y++)

{

byte p = mod(rand.Next(), 256), c = mod(p, 3), z = 255; // NOTE: "z" can be any shade between 0 and 255

bmpx, y = new Rgb24(c == 0 ? p : z, c == 1 ? p : z, c == 2 ? p : z); // NOTE: set the color of the pixel at (x, y)

}

}

public IActionResult Index()

{

int image = int.Parse(Request.Cookies"image" ?? "0");

Response.Cookies.Append("image", (image + 1).ToString());

const int shift = 9;

const int width = 1 << shift, height = 1 << shift;

using (var bmp = new Image<Rgb24>(width, height)) // NOTE: create 24-bit bitmap

{

switch (mod(image, 4))

{

case 0:

Image0(bmp);

break;

case 1:

Image1(bmp);

break;

case 2:

Image2(bmp);

break;

case 3:

Image3(bmp);

break;

}

byte\[\] data;

using (var ms = new MemoryStream())

{

bmp.SaveAsJpeg(ms); // NOTE: save the bitmap as a JPEG image to the stream

data = ms.ToArray();

}

// NOTE: alternatively, send the data to the browser as a download with the file name "attachment.jpg" by uncommenting the following line

// return File(data, System.Net.Mime.MediaTypeNames.Image.Jpeg, "attachment.jpg");

return File(data, System.Net.Mime.MediaTypeNames.Image.Jpeg); // NOTE: send the data to the browser as a file of mime type "image/jpeg"

}

}

}

}

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
kybs19915 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
Lost of 程序猿7 天前
用 YARP 为 .NET 微服务搭一座“立交桥“:路由转发与生产配置实践
c#·asp.net
csdn_aspnet7 天前
.NetCore Webapi 接口验证请求来源
.netcore·ip·token·签名·webapi·cors·sign
Lost of 程序猿7 天前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net
宝桥南山10 天前
Microsoft Fabric - 简单尝试一下Microsoft Fabric .NET SDK
microsoft·微软·.net·.netcore·powerbi·fabric
Lost of 程序猿10 天前
.NET 10 船端单机部署与离线升级实战:从闪退事故到无感回滚
c#·asp.net·.net
geovindu11 天前
CSharp:Condition Variable Pattern
后端·设计模式·c#·.net·.netcore·条件变量模式·同步型模式
Lost of 程序猿13 天前
M2 实战:询价与采购订单聚合落地——跨聚合一致性、领域事件与 Outbox
开发语言·c#·asp.net·.net
Lost of 程序猿14 天前
船岸数据同步链路实战:SendFlag、单调版本号与断网三天后的续传
后端·c#·asp.net
geovindu16 天前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式