.NET Core 项目Linux环境下生成二维码
问题:
公司系统开发中,需要对企微授权链接进行二维码生成,然后向客户提供;当然,首当其冲想到的是使用ZXing.NET库进行实现,毕竟生成简单二维码也就那几句代码;
然而,在本地环境中,一切都很正常,但是进入到开发环境中却出现了如下的异常:
System.TypeInitializationException: The type initializer for'Gdip' threw an exception.

代码:
/// <summary>
/// 生成二维码
/// </summary>
/// <param name="value">value</param>
/// <param name="width">二维码宽,默认500</param>
/// <param name="height">二维码高,默认500</param>
public static Bitmap ToQrCode(this string value, int width = 500, int height = 500)
{
BarcodeWriter writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
QrCodeEncodingOptions options = new QrCodeEncodingOptions
{
DisableECI = true,
CharacterSet = "UTF-8",
Margin = 1,
Width = width,
Height = height
};
writer.Options = options;
return writer.Write(value);
}
原因:
从异常信息中不难看出来,是 System.Drawing 接口抛出的异常;
经过冲浪发现,System.Drawing.Common被归为Windows特定的库,是对windows下绘图的一个简单封装,缺少跨平台的支持,这也就导致了我在本地环境(windows)下正常,但是去到了开发环境(Linux)却发生了异常;
解决:
1、在linux环境下安装libgdipplus包
libgdiplus 实际上是对 System.Drawing.Common 所依赖的 Windows 部分针对linux平台下的重新实现;
2、更换图像库
如使用如下库:
在我司,架构师说不推荐使用第一种方式,毕竟迁移项目或者增加节点时需要进行相应的服务器配置,这是相对比较麻烦的;
所以我们选择了第二种,且使用了SixLabors.ImageSharp进行了图片的处理;同时,生成二维码的库也换成了针对SixLabors.ImageSharp实现的ZXing.NET 版本的库;
对此需要安装如下包:
- ZXing.Net.Bindings.ImageSharp.V2
- SixLabors.ImageSharp
具体实现代码如下:
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using System.IO;
using ZXing;
/// <summary>
/// 生成二维码
/// </summary>
/// <param name="value">value</param>
/// <param name="width">二维码宽,默认500</param>
/// <param name="height">二维码高,默认500</param>
public static Bitmap ToQrCode(this string value, int width = 500, int height = 500)
{
var writer = new ZXing.ImageSharp.BarcodeWriter<Rgba32>
{
Format = BarcodeFormat.QR_CODE,
Options = new ZXing.QrCode.QrCodeEncodingOptions
{
DisableECI = true,
CharacterSet = "UTF-8",
Width = width,
Margin = 1
}
};
var image = writer.WriteAsImageSharp<Rgba32>(value);
var ms = new MemoryStream();
image.Save(ms, new PngEncoder());
return ms;
}
.NET Core 项目Linux环境下生成二维码的更多相关文章
- 基于Asp.Net Core,利用ZXing来生成二维码的一般流程
本文主要介绍如何在.net环境下,基于Asp.Net Core,利用ZXing来生成二维码的一般操作.对二维码工作原理了解,详情见:https://blog.csdn.net/weixin_36191 ...
- QrenCode : linux命令行下生成二维码图片
原文链接:http://wowubuntu.com/qrencode.html # 作者:riku/ / 本文采用CC BY-NC-SA 2.5协议授权,转载请注明本文链接. 对于二维码大家应该并不陌 ...
- QrenCode : 命令行下生成二维码图片
对于二维码大家应该并不陌生,英文名为 2-dimensional bar code 或 QR Code,是一种用图形记载信息的技术,最常见的是应用在手机应用上.用户通过手机摄像头扫描二维码或输入二维码 ...
- vue cli3项目中使用qrcodejs2生成二维码
组件的形式创建 1.下载依赖 npm install qrcodejs2 2.创建一个.vue的组件放置代码(我创建的是qrcodejs2.vue) //template中的代码 <templa ...
- vue环境中生成二维码
<template><div><div id='code'></div><canvas id="canvas">< ...
- Excel催化剂开源第26波-Excel离线生成二维码条形码
在中国特有环境下,二维码.条形码的使用场景非常广泛,因Excel本身就是一个非常不错的报表生成环境,若Excel上能够直接生成二维码.条形码,且是批量化操作的,直接一条龙从数据到报表都由Excel完成 ...
- Java与JS生成二维码
1.二维码概念 二维码/二维条码是用某种特定的集合图形按一定规律在平面上(二维方向上)分布的黑白相间的图形记录数据符号信息的图片. 黑线是二进制的1,空白的地方是二进制的0,通过1.0这种数据组合用于 ...
- 阐述二维码的原理以及使用google api和PHP QR Code来生成二维码
一.什么是二维码:二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的.在许多种类的二维条码中,常用的码 ...
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
C# 动态创建SQL数据库(二) 使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...
- .net core 生成二维码
其实生成二维码的组件有很多种,如:QrcodeNet,ZKWeb.Fork.QRCoder,QRCoder等 我选QRCoder,是因为小而易用.支持大并发生成请求.不依赖任何库和网络服务. 既然是. ...
随机推荐
- c# mvc 移除多于的视图引擎
前言 在我们的mvc中,我们又很多视图引擎是不需要的.为什么这么说呢? 我们知道计算机玩的就是遍历. 上图中我们可以看到,首先找的是index.aspx,因为我们都是cshtml,那么去映射的时候呢每 ...
- Lattice Crosslink开发简介
选择lattice的Crosslink器件,大多是因为它功耗比较低.价格便宜,开发也比较简单,相对来说更容易上手.大部分用在手机屏,摄像头模组和平板方面. Crosslink的开发工具是Diamond ...
- locust常用的配置参数【locust版本:V1.1.1】
locust 官网文档地址:https://docs.locust.io/en/stable/configuration.html Locust QQ 群: 执行命令如: master: locust ...
- 如何使用XSSFWorkbook读取文本薄?
[版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18146625 出自[进步*于辰的博客] 1.文件兼容类 ...
- KubeVela:标准化的云原生平台构建引擎
简介: 本文由"GO 开源说"第三期 KubeVela 直播内容修改整理而成,视频内容较长,本文内容有所删减和重构. KubeVela 的背景 KubeVela 是一个基于 Go ...
- 使用MQTT与函数计算做热力图的实践
简介: 在各类场景中,关于上报数据的处理无处不在,而以上提到的场景都可以通过本方案的MQTT+FC+API Gateway的方式参考优化来实现. 前言 最近几年,我们在一些商场.图书馆.机场或港口环境 ...
- OpenTelemetry 简析
简介: OpenTelemetry 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型.采集.处理.导出等的标准化问题,提供与三方 vendor 无关的服务. ...
- 顺丰科技 Hudi on Flink 实时数仓实践
简介: 介绍了顺丰科技数仓的架构,趟过的一些问题.使用 Hudi 来优化整个 job 状态的实践细节,以及未来的一些规划. 本文作者为刘杰,介绍了顺丰科技数仓的架构,趟过的一些问题.使用 Hudi ...
- WPF 修复引用库报错 所使用的 PresentationFramework 6
本文记录一个 WPF 构建的坑,这是 WPF 仓库的运维管理大意挖的坑.将会在大家使用低版本的 dotnet 6 如 6.0.1 版本时,引用其他人使用高 dotnet 6 版本,如 dotnet 6 ...
- WPF 从零自己实现从 RealTimeStylus 获取触摸信息
本文将告诉大家什么是 RealTimeStylus 以及如何从零开始不使用 WPF 框架提供的功能从 RealTimeStylus 获取到触摸信息 开始之前先复习一下 Windows 的触摸演进.在上 ...