欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

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

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

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

一、首先在common公用项目中引用qrcoder类库

 install-package qrcoder -version 1.3.3

二、在common公用项目中创建qrcoderhelper类

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

        #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,15,6, 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控制器处理请求并返回二维码图片

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

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=5)
        {
            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 = 5)
        {
            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="5" min="1" max="20" 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="5" min="1" max="20" onchange="logocreate();">
    <img id="logoimg" />
</div>

五、那么看下效果吧

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

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

 

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