.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,是因为小而易用.支持大并发生成请求.不依赖任何库和网络服务. 既然是. ...
随机推荐
- Python 爬虫初探
准备部分 0x01 爬虫的简介和价值 a. 简介 自动抓取互联网数据的程序,是基础技术之一 b. 价值 快速提取网络中有价值的信息 0x02 爬虫的开发环境 a. 环境清单 Python3.7 开发环 ...
- sql 语句系列(行与列处理)[八百章之第一章]
排序时对null进行处理 比如说: select * from EMP order by COMM 我需要对红框部分进行desc处理,也就是从大到小排列. 解析: 重点是如何让null独立出去. se ...
- 禅道统计BUG解决时长过滤节假日和跨天问题
之前发过禅道的各种数据统计报表,使用过程中优化了一些,反映最多的是项目bug的解决时长统计问题: 1.比如当天下班左右提交的bug,研发第二天来解决,晚上这段时间应该去掉,不应计算在内 2.节假日.周 ...
- 详细的讲一下微服务框架--SpringCloud
一:微服务架构? 1.为什么需要微服务架构 大家都知道,最开始开发系统就是单机模式(only one computer).但是随着网络的不断发展,数据不断的增加,业务不断的增加,之前在一台机器上实现的 ...
- 报错ORA-01830: date format picture ends before converting entire input string
报错ORA-01830: date format picture ends before converting entire input string 原语句 select to_char(to_da ...
- 力扣578(MySQL)-查询回答率最高的问题(中等)
题目: 从 survey_log 表中获得回答率最高的问题,survey_log 表包含这些列:id, action, question_id, answer_id, q_num, timestamp ...
- 暑期集训 Day11 —— 模拟赛复盘
${\color{Green} \mathrm{Problem\ 1 :Subarray }} $ 签到失败... 直接二进制分组,找出所有二进制位=0 的方法. 死因: 二进制分组没想出来... $ ...
- 关于 Data Lake 的概念、架构与应用场景介绍
数据湖(Data Lake)概念介绍 什么是数据湖(Data Lake)? 数据湖的起源,应该追溯到2010年10月,由 Pentaho 的创始人兼 CTO, James Dixon 所提出,他提出的 ...
- 云上安全保护伞--SLS威胁情报集成实战
简介: 威胁情报是某种基于证据的知识,包括上下文.机制.标示.含义和能够执行的建议. 什么是威胁情报 根据Gartner对威胁情报的定义,威胁情报是某种基于证据的知识,包括上下文.机制.标示.含义和能 ...
- [PHP] 如何让 php-fpm 的循环 echo 实时输出到浏览器
PHP 里开启实时输出方法是 ob_implicit_flush() , 但它大部分情况下都不管用, 因为 php.ini 配置里 output_buffering 输出缓冲大部分是 On 开启的 ...