惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Y
Y Combinator Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
D
Docker
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
B
Blog
Vercel News
Vercel News
Recent Announcements
Recent Announcements
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
宝玉的分享
宝玉的分享

博客园 - 落叶子

FreeRedis 实现消费确认队列和消费延时确认队列 快速部署单机k3s+Kuboard控制面板 解决微软鼠标设置宏后桌面有效果 进游戏就没有效果了 FreeScheduler 在asp.net core 中使用依赖注入的方式进行注入使用 GC 性能调优相关 .net 中使用OpenCvSharp 判断一张图片中是否包含指定图标 maui BlazorWebView+本地html (vue、uniapp等都可以) 接入支付宝sdk 进行支付宝支付 开发 Android app maui BlazorWebView+本地html (vue、uniapp等都可以) 接入微信sdk 开发 Android app maui BlazorWebView+本地html 打包Android app 实现支付宝H5支付 maui WebView 打包Android app 实现线上网页 支付宝H5支付 maui BlazorWebView Android 中混合使用https和http 原生js+html+css 实现大转盘抽奖效果,实现人员占位,转盘缓慢停止时依次显示奖品图片 Serilog日志同步到redis中和自定义Enricher来增加额外的记录信息 c# .net 多类实现同一个接口,动态指定使用哪一个类的实现 C#、 .net 修改和移除 url 中的参数 windows 批量删除docker 镜像 uniapp 原生websocket 使用 signalr k8s docker 中部署think php 并搭建php websocket .net core Unicode 转中文
.net core 使用QRCoder在linux 下生成带logo的二维码
落叶子 · 2024-09-24 · via 博客园 - 落叶子

1使用nuget安装QRCoder、SkiaSharp、SkiaSharp.NativeAssets.Linux.NoDependencies

public IActionResult QrCode(string content, int pixel)
{
    content = HttpUtility.UrlDecode(content);
    string logoPath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "images", "log.png");
    using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
    using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(content, QRCodeGenerator.ECCLevel.Q))
    using (PngByteQRCode qrCode = new PngByteQRCode(qrCodeData))
    {
        var qrCodeBytes = qrCode.GetGraphic(pixel, Color.Black, Color.White);
        using (MemoryStream ms = new MemoryStream(qrCodeBytes))
        {
            SKBitmap qrCodeImage = SKBitmap.Decode(ms);
            using (var logoStream = System.IO.File.Open(logoPath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                SKBitmap logo = SKBitmap.Decode(logoStream);
                int logoSize = Math.Min(qrCodeImage.Width / 3, qrCodeImage.Height / 3); // 根据二维码大小调整logo大小
                int x = (qrCodeImage.Width - logoSize) / 2;
                int y = (qrCodeImage.Height - logoSize) / 2;

                // 创建一个新的画布
                using (var canvas = new SKCanvas(qrCodeImage))
                {
                    // 绘制logo到二维码中心
                    canvas.DrawBitmap(logo, new SKRect(x, y, x + logoSize, y + logoSize));
                }
            }
            // 将最终的图像编码为PNG格式并返回内存流
            using (var image = SKImage.FromBitmap(qrCodeImage))
            using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
            {
                return File(data.ToArray(), "image/png");
            }

        }
    }

}