博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成带内嵌图片的二维码
阅读量:7143 次
发布时间:2019-06-29

本文共 2377 字,大约阅读时间需要 7 分钟。

在博问上看到有同学在问如何实现一个带内嵌图片的二维码,所以准备记录下来,供同学们参考。

 

1、首先准备一个用于内嵌的图片。

2、既然生成二维码码,那肯定需要将什么样的内容生成二维码,这里我用http://www.baidu.com作为生成二维码的字符串

private string QcodeSource        {            get            {                return "http://www.baidu.com";            }        }

3、我们来看看根据QcodeSource生成二维码的方法,这里返回Byte[]。PS:这里用了  生成二维码的库,点击链接下载

public static byte[] GetQrCodeBitmapImage(string qrcode)        {            try            {                if (string.IsNullOrWhiteSpace(qrcode)) return null;                // Get QrCode GraphicsRenderer                var qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);                var qrCode = qrEncoder.Encode(qrcode);                var renderer = new GraphicsRenderer(new FixedModuleSize(24, QuietZoneModules.Four), Brushes.Black, Brushes.White);                using (var stream = new MemoryStream())                {                    renderer.WriteToStream(qrCode.Matrix, ImageFormat.Jpeg, stream);                    stream.Seek(0, SeekOrigin.Begin);                    stream.Flush();                    return stream.ToArray();                }            }            catch (Exception)            {                return null;            }        }

4、既然上面返回了图片的Byte[],所以接下来我们把准备内嵌的图片和这个二维码图片拼成一个图片,如何将内嵌图片编程Byte[]这里不做熬述。

///           /// 调用此函数后使此两种图片合并,类似相册,有个          /// 背景图,中间贴自己的目标图片          ///           /// 粘贴的源图片          /// 粘贴的目标图片          public static Bitmap CombinImage(Bitmap sourceImage, Bitmap destBitmap)        {            if (destBitmap.Height != 250 || destBitmap.Width != 250)            {                destBitmap = KiResizeImage(destBitmap, 250, 250, 0);            }            using (var g = Graphics.FromImage(sourceImage))            {                //g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高);                 g.DrawImage(sourceImage, 0, 0, sourceImage.Width, sourceImage.Height);                //g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);//相片四周刷一层黑色边框                  g.DrawImage(destBitmap, sourceImage.Width / 2 - destBitmap.Width / 2, sourceImage.Width / 2 - destBitmap.Width / 2, destBitmap.Width, destBitmap.Height);                GC.Collect();                return sourceImage;            }        }

5、下面上效果图

 

总结:生成结束,主要用了 这个库,代码还是相对来讲比较简单的。

 

转载于:https://www.cnblogs.com/yangtongnet/p/3928813.html

你可能感兴趣的文章
Android平台框架学习
查看>>
netty的零拷贝机制
查看>>
AOP 面向切面 代理@Aspect
查看>>
【更新】浏览器控件JxBrowser V6.14.2发布 | 修复多个重大bug
查看>>
仅仅一天,5大巨头公司市值增近2000亿美元!
查看>>
Ubuntu 12.04.1 下搭建 Python3.4.2 + Qt5.3.2 + PyQt5.11.3 + Eric6.0 开发平台
查看>>
个人--一辈子受用的十二条人生经验
查看>>
AMD规范
查看>>
跨域登陆zabbix系统
查看>>
MySQL5.7 添加用户、删除用户与授权
查看>>
GO 安装包
查看>>
垃圾收集器与内存分配策略
查看>>
在CentOS 7 mini版中使用ifconfig
查看>>
未来Linux Kernel 将不支持可变长数组VLA
查看>>
关于 try - catch - finally
查看>>
Linux NFS服务器的安装与配置
查看>>
NFS服务搭建与配置(二)exportfs命令,FTP服务搭建
查看>>
获得指定日期【月初和月末】
查看>>
Angular动画
查看>>
谈谈redis,memcache的区别和具体应用场景
查看>>