.netcore 生成中间有logo图标的二维码

时间:2020-08-20 19:46:51 来源:

【摘要】 .netcore 生成中间有logo图标的二维码考必过小编为大家整理了关于.netcore 生成中间有logo图标的二维码的信息,希望可以帮助到大家!

.netcore 生成中间有logo图标的二维码

标签:cal   bitmap   width   idt   param   bcd   开始   save   des   

本文介绍在.netcore 平台下,使用 ThoughtWorks.QRCode.Core 生成中间有logo图标的二维码

第一步:NuGet 添加 ThoughtWorks.QRCode.Core:

第二步:编写代码

public class QRCodeHelper
{
public static string GetQRCode()
{

        using (System.Drawing.Image qrCodeImg = GenerateQRCode("1234567890abcdefghABCDEFGH唐宋元明清")) //生成的二维码
        {
            //生成二维码中间logo的图片。
            string logoImgPath = $"{AppDomain.CurrentDomain.BaseDirectory}/Assets/ContactQRCode/QRCodeLogo.png";
            using (System.Drawing.Image logoImg = System.Drawing.Image.FromFile(logoImgPath))
            {
                //组合 二维码和logo,形成带logo的二维码,并保存
                string qrCodeImgPath = $"{AppDomain.CurrentDomain.BaseDirectory}/Assets/ContactQRCode/22.png";
                CombinImage(qrCodeImg, logoImg).Save(qrCodeImgPath);
                return qrCodeImgPath;
            }   
        }
    }

    /// <summary>
    /// 生成二维码:根据传进去的数据 生成二维码
    /// </summary>
    /// <param name="data">用于生成二维码的数据</param>
    /// <returns></returns>
    public static System.Drawing.Image GenerateQRCode(String data)
    {
        //创建编码器,设置编码格式。Byte格式的编码,只要能转成Byte的数据,都可以进行编码,比如中文。NUMERIC 只能编码数字。
        QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;

        //大小,值越大生成的二维码图片像素越高
        qrCodeEncoder.QRCodeScale = 5;

        //版本,设置为0主要是防止编码的字符串太长时发生错误
        qrCodeEncoder.QRCodeVersion = 0;

        //生成二维码 Bitmap
        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;//错误效验、错误更正(有4个等级)
        qrCodeEncoder.QRCodeBackgroundColor = System.Drawing.Color.White;//背景色
        qrCodeEncoder.QRCodeForegroundColor = System.Drawing.Color.Black;//前景色
        var pbImg = qrCodeEncoder.Encode(data, System.Text.Encoding.UTF8);
        return pbImg;
    }

    /// <summary>
    /// 给二维码中间添加图片(logo):将二维码作为背景图片,把小的logo图片放入背景图片的正中央。  
    /// </summary>
    /// <param name="backgroundImg">背景图片(此处为二维码)</param>
    /// <param name="logoImg">logo 图片</param>
    public static System.Drawing.Image CombinImage(System.Drawing.Image backgroundImg, System.Drawing.Image logoImg)
    {
        using (Graphics g = Graphics.FromImage(backgroundImg))
        {

            //画背景(二维码)图片,指定开始坐标为 x:0,y:0,指定背景图片宽高。
            g.DrawImage(backgroundImg, 0, 0, backgroundImg.Width, backgroundImg.Height);

            //logo 图片,重新设置图片宽高
            logoImg = ResizeImage(logoImg, 30, 30, 0);

            //logo四周刷一层红色边框
            //g.FillRectangle(System.Drawing.Brushes.Red, backgroundImg.Width / 2 - img.Width / 2 - 1, backgroundImg.Width / 2 - img.Width / 2 - 1, 32, 32);

            //画logo图片,设置坐标位置,让其居于正中央。
            g.DrawImage(logoImg, backgroundImg.Width / 2 - logoImg.Width / 2, backgroundImg.Width / 2 - logoImg.Width / 2, logoImg.Width, logoImg.Height);

            return backgroundImg;
        }
    }

    /// <summary>
    /// 重新设置图片的宽高
    /// </summary>
    /// <param name="bmp">原始Bitmap</param>
    /// <param name="newW">新的宽度</param>
    /// <param name="newH">新的高度</param>
    /// <param name="Mode">保留着,暂时未用</param>
    /// <returns>重新设置宽高后的图片</returns>
    public static System.Drawing.Image ResizeImage(System.Drawing.Image bmp, int newW, int newH, int Mode)
    {
        System.Drawing.Image b = new Bitmap(newW, newH);
        using (Graphics g = Graphics.FromImage(b))
        {
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
            return b;
        }
    }
}

.netcore 生成中间有logo图标的二维码

标签:cal   bitmap   width   idt   param   bcd   开始   save   des   

以上就是.netcore 生成中间有logo图标的二维码的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!

上一篇      下一篇
前端相关推荐 更多>>
Web前端工程师需要学习的技能清单 css性能优化-will-change CSS之文本两端对齐 这样的广告请再来一打 — background-attachment 初识 CSS Shapes —– (二) 初识 CSS Shapes CSS3– filter(滤镜) chrome transition闪烁BUG
前端热点专题 更多>>
热点问答
国家公务员考试年龄限制是多少 公务员国考和省考考试内容有什么区别 函授大专学历能不能考公务员 国家公务员考试考点能自己选择吗 新闻学专业能报考2022年公务员考试吗 什么是联合培养研究生 什么是破格录取研究生 什么人不适合读研 研究生报名户口所在地填什么 研究生结业和毕业有什么区别
网站首页 网站地图 返回顶部
考必过移动版 https://m.kaobiguo.net