首页 > 系统相关 >QRCoder1.4.3生成二维码,不依赖System.Drawing,解决"未能找到类型或命名空间名QRCode","及ImageFormatPng仅在windows上

QRCoder1.4.3生成二维码,不依赖System.Drawing,解决"未能找到类型或命名空间名QRCode","及ImageFormatPng仅在windows上

时间:2024-01-09 12:44:07浏览次数:26  
标签:QRCoder1.4 上受 50 borderWidth using QRCode new SixLabors size

生成二维码1(简单)

包引用:

<PackageReference Include="QRCoder" Version="1.4.3" />

using QRCoder;
/// <summary>
/// 生成二维码
/// </summary>
/// <param name="data">escape后的数据,防止中文等特殊字符引起问题</param>
/// <param name="size">二维码宽高</param>
/// <param name="level">0.L (7%), 1.M (15%), 2.Q (25%) 3.H (30%)</param>
/// <param name="border">是否包含白边</param>
/// <returns></returns>
[HttpGet]
public IActionResult Generate(string text, int size = 400, int level = 1, bool border = false)
{
    if (string.IsNullOrEmpty(text))
        return BadRequest("内容不能为空.");

    //设置最小和最大尺寸50-1920
    size = size < 50 ? 50 : size > 1920 ? 1920 : size;

    QRCodeGenerator qrGenerator = new();
    QRCodeData qrCodeData = qrGenerator.CreateQrCode(text, (QRCodeGenerator.ECCLevel)level);

    int pixelsPerModule = size / 21; //size = pixelsPerModule * 21
    using PngByteQRCode qrCode = new(qrCodeData);
    byte[] qrCodeBytes = qrCode.GetGraphic(pixelsPerModule, drawQuietZones: border);

    // 将字节数组转换为Base64字符串
    string base64Image = Convert.ToBase64String(qrCodeBytes);
    // 返回Base64字符串作为图片的src属性值 // return $"data:image/png;base64,{base64Image}";
    return File(qrCodeBytes, "image/png", "QrCode.png");
}

优点:生成的base64比较小

缺点:不能控制白边的宽度

    size大小需要是21的倍数,否则生成的二维码宽度<=指定的size大小

 

生成二维码2(自定义白边的宽度

引用包:

<PackageReference Include="SixLabors.ImageSharp" Version="3.1.2" />

using QRCoder;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using WebApplication7.Models;
using Color = SixLabors.ImageSharp.Color;
using Image = SixLabors.ImageSharp.Image;
using Point = SixLabors.ImageSharp.Point;
[HttpGet]
public IActionResult Generate2(string text, int size = 400, int level = 1, int borderWidth = 0)
 {
     if (string.IsNullOrEmpty(text))
         return BadRequest("内容不能为空.");

     //设置最小和最大尺寸50-1920
     size = size < 50 ? 50 : size > 1920 ? 1920 : size;

     QRCodeGenerator qrGenerator = new();
     QRCodeData qrCodeData = qrGenerator.CreateQrCode(text, (QRCodeGenerator.ECCLevel)level);

     using PngByteQRCode qrCode = new(qrCodeData);
     byte[] qrCodeBytes = qrCode.GetGraphic(50, drawQuietZones: false);

     using MemoryStream stream = new(qrCodeBytes);
     using Image<Rgba32> qrCodeImage = Image.Load<Rgba32>(stream);

     // 调整图像大小
     qrCodeImage.Mutate(ctx => ctx.Resize(size, size));

     // 添加空白来模拟白边
     borderWidth = borderWidth <= 0 ? 50 : borderWidth; // 调整白边的宽度
     Image<Rgba32> borderedImage = new(qrCodeImage.Width + 2 * borderWidth, qrCodeImage.Height + 2 * borderWidth);
     borderedImage.Mutate(ctx => ctx.BackgroundColor(Color.White).DrawImage(qrCodeImage, new Point(borderWidth, borderWidth), 1f));

     // 将调整大小后的图像保存为字节数组
     using MemoryStream resizedStream = new();
     borderedImage.Save(resizedStream, new PngEncoder());
     byte[] resizedBytes = resizedStream.ToArray();

     // 将字节数组转换为Base64字符串
     string base64Image = Convert.ToBase64String(resizedBytes);
     // 返回Base64字符串作为图片的src属性值 // return $"data:image/png;base64,{base64Image}";
     return File(resizedBytes, "image/png", "QrCode.png");
 }

优缺点与方法1相反

 

标签:QRCoder1.4,上受,50,borderWidth,using,QRCode,new,SixLabors,size
From: https://www.cnblogs.com/slwangzi/p/17954218

相关文章

  • 基于uQRCode封装的Vue3二维码生成插件
    标题:基于uQRCode封装的Vue3二维码生成插件摘要:本文介绍了一种基于uQRCode封装的Vue3二维码生成插件,可以在Javascript运行环境下生成二维码并返回图片地址。该插件适用于所有Javascript运行环境,并且支持微信小程序。本文将详细介绍该插件的使用方法,并给出一个基于Vue3的示例。关......
  • GitLab 不允许将代码推送到该项目上受保护的分支
    不允许将代码推送到该项目上受保护的分支这意味着还没有要保护的master分支,因为空存储库没有分支。要"启用/禁用分支保护",您需要是GitLab项目的主管理员或所有者。该分支是master是受保护分支,无论是master还是开发者都无权限push,只有owner可以操作。1.gitpush:"错误:无法将某......
  • vue3中使用qrcode生成二维码
    安装npminstall--saveqrcode.vueoryarnaddqrcode.vue组件中使用<scriptsetuplang="ts">import{useUiSetStore}from'@store/modules/uiSettings'//导入二维码组件importQrcodeVuefrom'qrcode.vue'constui=useUiSetStore()......
  • 前端生成二维码,qrcode使用说明,canvas查看大图
    生成二维码用于vue项目通过字符串转换生成二维码的三方插件安装插件npminstall--saveqrcode引入使用importQRCodefrom"qrcode"页面<!--放置二维码的容器--><canvas:id="'qrCode_id'+stringxxxxx"class="qrCode_style"></canvas><!--可......
  • uQRCode 全端二维码生成插件
    uQRCode全端二维码生成插件地址:https://ext.dcloud.net.cn/plugin?id=1287  #npm安装npminstalluqrcodejs//npm安装importUQRCodefrom'uqrcodejs';//npminstalluqrcodejs<canvasid="qrcode"canvas-id="qrcode"style="width:......
  • C# 使用 PaddleOCRSharp 识别 图片中的文字、 使用QRCoder生成二维码
    使用PaddleOCRSharp识别图片中的文字  在只用PaddleOCRSharp之前用过另外一种识别:Tesseract。它识别速度是非常快的,但是准确率堪忧,而且使用的时候需要区分语言,这里权当一些经验交流,不是说Tesseract不好。PaddleOCRSharp资料汇总:开源工具开发者博客:https://www.cnblogs.com/ra......
  • qrcode生成二维码
    jsqrcode包生成二维码安装npminstall--saveqrcode或者,全局安装以便从命令行保存qrcode图像或生成您可以在您的终端中查看的图像。npminstall-gqrcode使用importQRCodefrom"qrcode"letcode="string....";QRCode.toDataURL(code,{errorCorrect......
  • JAVA实现海报背景填充qrCode
    packagecom.open.openbank.qrCode;importjavax.imageio.ImageIO;importjava.awt.*;importjava.awt.geom.RoundRectangle2D;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;/***生成海报*/publicclassPosterTest{......
  • springboot实现链接生成QrCode
    1.注入依赖<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version></dependency><dependency><groupId>com.google.zxing</groupId>......
  • python: generate and decode QrCode
     #encoding:utf-8#-*-coding:UTF-8-*-#版权所有2023©涂聚文有限公司#许可信息查看:#描述:#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python311#Datetime:2023/7/511:08#User:geovindu#Product:UI#Project......