随着互联网越来越生活化,二维码的使用越来越普遍,不论是扫码支付还是扫码关注引流,似乎我们总是离不开二维码,那么很多需要推广的文章或社区想要自己的二维码,那么你是不是需要在网站直接提供给用户呢?很多开发者就在网上百度解决方案,边做边踩坑,甚至很多人写的开发案例都是截图或者类库引用都没说清楚,在这个摸索的途中造成很多时间上的浪费。

尤其是尝试新技术那些旧的操作还会有所改变,为了节约开发时间,我们把解决方案收入到一个个demo中,方便以后即拿即用。而且这些demo有博客文档支持,帮助任何人非常容易上手开发跨平台的.net core。随着时间的推移,我们的demo库会日益强大请及时收藏GitHub

一、首先在Common公用项目中引用QRCoder类库

 Install-Package QRCoder -Version 1.3.

二、在Common公用项目中创建QRCoderHelper类

        #region 普通二维码
/// <summary>
///
/// </summary>
/// <param name="url">存储内容</param>
/// <param name="pixel">像素大小</param>
/// <returns></returns>
public static Bitmap GetPTQRCode(string url, int pixel)
{
QRCodeGenerator generator = new QRCodeGenerator();
QRCodeData codeData = generator.CreateQrCode(url, QRCodeGenerator.ECCLevel.M, true);
QRCoder.QRCode qrcode = new QRCoder.QRCode(codeData);
Bitmap qrImage = qrcode.GetGraphic(pixel, Color.Black, Color.White, true);
return qrImage;
}
#endregion #region 带logo的二维码
/// <summary>
///
/// </summary>
/// <param name="url">存储内容</param>
/// <param name="pixel">像素大小</param>
/// <returns></returns>
public static Bitmap GetLogoQRCode(string url,string logoPath, int pixel)
{
QRCodeGenerator generator = new QRCodeGenerator();
QRCodeData codeData = generator.CreateQrCode(url, QRCodeGenerator.ECCLevel.M, true);
QRCoder.QRCode qrcode = new QRCoder.QRCode(codeData);
Bitmap icon = new Bitmap(logoPath);
Bitmap qrImage = qrcode.GetGraphic(pixel, Color.Black, Color.White, icon,,, true);
#region 参数介绍
//GetGraphic方法参数介绍
//pixelsPerModule //生成二维码图片的像素大小 ,我这里设置的是5
//darkColor //暗色 一般设置为Color.Black 黑色
//lightColor //亮色 一般设置为Color.White 白色
//icon //二维码 水印图标 例如:Bitmap icon = new Bitmap(context.Server.MapPath("~/images/zs.png")); 默认为NULL ,加上这个二维码中间会显示一个图标
//iconSizePercent //水印图标的大小比例 ,可根据自己的喜好设置
//iconBorderWidth // 水印图标的边框
//drawQuietZones //静止区,位于二维码某一边的空白边界,用来阻止读者获取与正在浏览的二维码无关的信息 即是否绘画二维码的空白边框区域 默认为true
#endregion
return qrImage;
}
#endregion

注意:如果你想做其它调整可以参考我第二个方法中的参数介绍进行设置,考虑到大家的难处,我把那些相关参数帮各位查了。

三、添加QRCodeController控制器处理请求并返回二维码图片

private readonly IWebHostEnvironment webHostEnvironment;
//private readonly IHostingEnvironment _hostingEnvironment; 3.0之前使用它
public QRCodeController(IWebHostEnvironment _webHostEnvironment)
{
webHostEnvironment=_webHostEnvironment;
}
public IActionResult Index()
{
return View();
}
public IActionResult GetPTQRCode(string url, int pixel=)
{
url = HttpUtility.UrlDecode(url);
Response.ContentType = "image/jpeg"; var bitmap = QRCoderHelper.GetPTQRCode(url, pixel);
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Jpeg);
return File(ms.ToArray(), "image/png");
}
public IActionResult GetLogoQRCode(string url,string logoPath, int pixel = )
{
url = HttpUtility.UrlDecode(url);
logoPath= webHostEnvironment.WebRootPath + HttpUtility.UrlDecode(logoPath);
Response.ContentType = "image/jpeg"; var bitmap = QRCoderHelper.GetLogoQRCode(url, logoPath, pixel);
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Jpeg);
return File(ms.ToArray(), "image/png");
}

注意:其中IHostingEnvironment是.net core 3.0之前使用获取目录位置的,而我们.net core 3.0已经由IHostingEnvironment变更为IWebHostEnvironment来获取了。

四、前端请求设计

<link href="~/Lib/Mobile/jquery.mobile-1.4.5.min.css" rel="stylesheet" />
<script src="~/Lib/Mobile/jquery.mobile-1.4.5.min.js"></script>
<script type="text/javascript">
$(function () {
PTCreate();
LogoCreate();
});
function PTCreate() {
pt = escape($("#PT").val());//防止中文等特殊字符引起问题
ptSize = $("#PTSize").val();
var id = document.getElementById("PTImg");
var str = "../QRCode/GetPTQRCode?url=" + pt + "&pixel=" + ptSize + "&random=" + Math.random();
id.setAttribute("src", str);
}
function LogoCreate() {
logo = escape($("#Logo").val());
logoPath = escape($("#LogoPath").val());
logoSize = $("#LogoSize").val();
var id = document.getElementById("LogoImg");
var str = "../QRCode/GetLogoQRCode?url=" + logo + "&logoPath=" + logoPath + "&pixel=" + logoSize + "&random=" + Math.random();
id.setAttribute("src", str);
}
</script>
<div style="width:60%; margin:auto;text-align:center;">
<h2>普通二维码</h2>
<input type="text" class="form-control" id="PT" placeholder="请输入字符" value="www.jiyuwu.com"><button onclick="PTCreate();">生成</button>
<input type="range" name="points" id="PTSize" value="" min="" max="" onchange="PTCreate();">
<br />
<img id="PTImg" />
<h2>Logo二维码</h2>
<input type="text" class="form-control" id="Logo" placeholder="请输入字符" value="www.jiyuwu.com">
<input type="text" class="form-control" id="LogoPath" placeholder="logo位置" value="\Lib\Markdown\images\logos\editormd-logo-32x32.png">
<button onclick="LogoCreate();">生成</button>
<input type="range" name="points" id="LogoSize" value="" min="" max="" onchange="LogoCreate();">
<img id="LogoImg" />
</div>

五、那么看下效果吧

开源地址 动动小手,点个推荐吧!

注意:我们机遇屋该项目将长期为大家提供asp.net core各种好用demo,旨在帮助.net开发者提升竞争力和开发速度,建议尽早收藏该模板集合项目

建议收藏备用:.net core使用QRCoder生成普通二维码和带Logo的二维码详细使用教程,源码已更新至开源模板的更多相关文章

  1. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  2. 建议收藏:.net core 使用导入导出Excel详细案例,精心整理源码已更新至开源模板

    还记得刚曾经因为导入导出不会做而发愁的自己吗?我见过自己前同事因为一个导出改了好几天,然后我们发现虽然有开源的库但是用起来却不得心应手,主要是因为百度使用方案的时候很多方案并不能解决问题. 尤其是尝试 ...

  3. .net core 对象序列化为Json及Json反序列化关于DataContractJsonSerializer和Newtonsoft使用的完整案例,源码已更新至开源模板

    很多人告诉你怎么用,但是却不会告诉你用什么好.不知道在进行序列化和反序列化Json时用那个好,因为有太多选择,如.NET Framework下可以选DataContractJsonSerializer ...

  4. ZXing生成条形码、二维码、带logo二维码

    采用的是开源的ZXing,Maven配置如下,jar包下载地址,自己选择版本下载,顺便推荐下Maven Repository <!-- https://mvnrepository.com/art ...

  5. ZXing 生成、读取二维码(带logo)

    前言 ZXing,一个支持在图像中解码和生成条形码(如二维码.PDF 417.EAN.UPC.Aztec.Data Matrix.Codabar)的库.ZXing(“zebra crossing”)是 ...

  6. QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)

    原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 续前:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)  http://blog.csdn.net/johnsu ...

  7. C#生成带logo的二维码

    带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码. 生成的二维码效果如下: 下面直接贴出二维码生成类   QRCode ...

  8. .NET生成带Logo的二维码

    使用ThoughtWorks.QRCode生成,利用这个库来生成带Logo的二维码(就是中间嵌了一个图片的二维码),直接见代码: HttpContext context = HttpContext.C ...

  9. C# 生成二维码,彩色二维码,带有Logo的二维码及普通条形码

    每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...

随机推荐

  1. springmvc处理局部异常和全局异常

    springmvc通过HandlerExceptionResolver(是一个接口,在spring-webmvc依赖下)处理程序异常,包括处理器异常.数据绑定异常以及处理器执行时发生的异常.Handl ...

  2. 洛谷 P2145 [JSOI2007]祖码

    题目描述 这是一个流行在Jsoi的游戏,名称为祖玛. 精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会 ...

  3. flask 微电影网站

    flask简介 轻量级web应用框架 WSGI工具箱才用Werkzeug 模版引擎则使用Jinja2 Flask使用BSD授权 1.virtualenv的使用 (1)创建虚拟环境:virtualenv ...

  4. MySQL基础(五)常见运算符

    MySQL常见运算符 运算符连接表达式中各个操作数,其作用是用来指明对操作数所进行的运算.常见的运算有数学计算.比较运算.位运算以及逻辑运算.运用运算符可以更加灵活地使用表中的数据,常见的运算符类型有 ...

  5. 超实用的mysql分库分表策略,轻松解决亿级数据问题

    一.分库分表的背景 在数据爆炸的年代,单表数据达到千万级别,甚至过亿的量,都是很常见的情景.这时候再对数据库进行操作就是非常吃力的事情了,select个半天都出不来数据,这时候业务已经难以维系.不得已 ...

  6. 生产环境中的kubernetes 优先级与抢占

    kubernetes 中的抢占功能是调度器比较重要的feature,但是真正使用起来还是比较危险,否则很容易把低优先级的pod给无辜kill.为了提高GPU集群的资源利用率,决定勇于尝试一番该feat ...

  7. 机器学习:eclipse中调用weka的Classifier分类器代码Demo

    weka中实现了很多机器学习算法,不管实验室研究或者公司研发,都会或多或少的要使用weka,我的理解是weka是在本地的SparkML,SparkML是分布式的大数据处理机器学习算法,数据量不是很大的 ...

  8. 给iOS中高级求职者的一份面试题解答

    前段时间更新了一篇 给iOS中高级面试官的一份招聘要求 收到很多小伙伴的点赞与关注.可能有很多小伙伴已经带着我在那篇文章给大家提供的一些面试技巧 & 其中的面试题 已经开始招聘或者应聘了!这里 ...

  9. 【websocket】spring boot 集成 websocket 的四种方式

    集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency> <groupId>org.springframework.boot</gr ...

  10. Python编程系列---装饰器执行的底层原理及流程

    代码中No.1  No.2 ...表示执行流程 """No.1 No.2 ...表示执行流程""" def set_func(func): ...