金湖棋牌游戏中心

长沙网站优化排名

新闻分类

联系我们

企业名称:长沙简界网络科技有限公司

联系人:房经理

电话:0731-82880004

手机:188-7414-8081

邮箱:779923984@qq。com

传真:0731-82880004

网址 :  www.sthbn.com  

地址:长沙市岳麓区铜盆湖路1号山水誉峰5栋5楼


使用ThoughtWorks.QRCode.dll 生成自定义尺寸和边框宽度的二维码

您的当前位置: 首 页 >> 新闻动态 >> 技术知识分享

使用ThoughtWorks.QRCode.dll 生成自定义尺寸和边框宽度的二维码

发布日期:2018-02-10 作者:简界科技 点击:

本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码。网上大多数文章只是简单介绍自定义参数的设置,根据自己找的一些资料和项目需要,增加了自定义二维码图片尺寸大小和边框。有需要的话欢迎尝试,如有问题欢迎留言指正。


首先,将 ThoughtWorks.QRCode.dll 放在 bin 目录下后,并在页面中引用:


生成二维码图片:

/// <summary>
/// 生成二维码
/// </summary>
/// <param name="Content">内容文本</param>
/// <param name="QRCodeEncodeMode">二维码编码方式</param>
/// <param name="QRCodeErrorCorrect">纠错码等级</param>
/// <param name="QRCodeVersion">二维码版本号 0-40</param>
/// <param name="QRCodeScale">每个小方格的预设宽度(像素),正整数</param>
/// <param name="size">图片尺寸(像素),0表示不设置</param>
/// <param name="border">图片白边(像素),当size大于0时有效</param>
/// <returns></returns>
public System.Drawing.Image CreateQRCode(string Content, QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode, QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect, int QRCodeVersion, int QRCodeScale, int size, int border)
{
    QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncodeMode;
    qrCodeEncoder.QRCodeErrorCorrect = QRCodeErrorCorrect;
    qrCodeEncoder.QRCodeScale = QRCodeScale;
    qrCodeEncoder.QRCodeVersion = QRCodeVersion;
    System.Drawing.Image image = qrCodeEncoder.Encode(Content);
     
    #region 根据设定的目标图片尺寸调整二维码QRCodeScale设置,并添加边框
    if (size > 0)
    {
        //当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
        #region 当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
        while (image.Width < size)
        {
            qrCodeEncoder.QRCodeScale++;
            System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
            if (imageNew.Width < size)
            {
                image = new System.Drawing.Bitmap(imageNew);
                imageNew.Dispose();
                imageNew = null;
            }
            else
            {
                qrCodeEncoder.QRCodeScale--; //新尺寸未采用,恢复最终使用的尺寸
                imageNew.Dispose();
                imageNew = null;
                break;
            }
        }
        #endregion
         
        //当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
        #region 当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
        while (image.Width > size && qrCodeEncoder.QRCodeScale > 1)
        {
            qrCodeEncoder.QRCodeScale--;
            System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
            image = new System.Drawing.Bitmap(imageNew);
            imageNew.Dispose();
            imageNew = null;
            if (image.Width < size)
            {
                break;
            }
        }
        #endregion
         
        //如果目标尺寸大于生成的图片尺寸,则为图片增加白边
        #region 如果目标尺寸大于生成的图片尺寸,则为图片增加白边
        if (image.Width <= size)
        {
            //根据参数设置二维码图片白边的最小宽度
            #region 根据参数设置二维码图片白边的最小宽度
            if (border > 0)
            {
                while (image.Width <= size && size - image.Width < border * 2 && qrCodeEncoder.QRCodeScale > 1)
                {
                    qrCodeEncoder.QRCodeScale--;
                    System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
                    image = new System.Drawing.Bitmap(imageNew);
                    imageNew.Dispose();
                    imageNew = null;
                }
            }
            #endregion
 
            //当目标图片尺寸大于二维码尺寸时,将二维码绘制在目标尺寸白色画布的中心位置
            if (image.Width < size)
            {
                //新建空白绘图
                System.Drawing.Bitmap panel = new System.Drawing.Bitmap(size, size);
                System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(panel);
                int p_left = 0;
                int p_top = 0;
                if (image.Width <= size) //如果原图比目标形状宽
                {
                    p_left = (size - image.Width) / 2;
                }
                if (image.Height <= size)
                {
                    p_top = (size - image.Height) / 2;
                }
                 
                //将生成的二维码图像粘贴至绘图的中心位置
                graphic0.DrawImage(image, p_left, p_top, image.Width, image.Height);
                image = new System.Drawing.Bitmap(panel);
                panel.Dispose();
                panel = null;
                graphic0.Dispose();
                graphic0 = null;
            }
        }
        #endregion
    }
    #endregion
    return image;
}
 
private static bool IsTrue() // 在Image类别对图片进行缩放的时候,需要一个返回bool类别的委托 
{
    return true;

}


在aspx页面调用和输出为图片流:


string content = string.IsNullOrEmpty(Request.QueryString["txt"]) ? "" : Request.QueryString["txt"];
int size = Convert.ToInt32(string.IsNullOrEmpty(Request.QueryString["size"]) ? "200" : Request.QueryString["size"]);
int border = Convert.ToInt32(string.IsNullOrEmpty(Request.QueryString["border"]) ? "10" : Request.QueryString["border"]);
 
System.Drawing.Image image = CreateQRCode(content, 
    QRCodeEncoder.ENCODE_MODE.BYTE, 
    QRCodeEncoder.ERROR_CORRECTION.M, 
    0, 
    5,
    size,
    border);
 
//将图片输出到页面
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Png";
HttpContext.Current.Response.OutputStream.Write(ms.ToArray(), 0, ms.ToArray().Length);
HttpContext.Current.Response.End();
 
ms.Close();
ms = null;
image.Dispose();

image = null;


生成二维码方法,效果如下(二维码仅供参考):

企业官网建设,长沙优化网站,长沙简界网络科技有限公司,长沙网站优化排名

以上就是长沙优化网站长沙网站优化排名公司长沙简界网络科技有限公司给大家带来的分享啦。

本文网址:http://www.sthbn.com/news/416.html

关键词:企业官网建设,长沙网站优化排名,长沙优化网站

最近浏览:

  • 在线客服
  • 联系电话
    18874148081
  • 在线留言
  • 手机网站
  • 在线咨询
    江苏11选5走势图 金湖棋牌APP下载 永凡棋牌 江苏11选5 江苏11选5开奖结果 江苏11选5走势图 江苏11选5 江苏11选5走势图 江苏11选5分布走势图 金湖棋牌游戏中心