仅讲思路,想要源码的请绕道。

一、样式

1、先看各种二维码的样式吧:

(1)最简单的样式——黑白样式,如下图:

图1  最平常见到的二维码样式
(如果你用智能手机,且已安装二维码扫描软件,扫描之后你会发现它就是一个网址:http://www.lgms.net)

(2)以下为在基本样式的基础上进行的改进:

图2  圆形点状样式(为了保持可识别性,三个定位方块图没有圆形点状化)。

图3  加外框的圆形点状二维码

图4  双色二维码(白底红码)

图5  数据区的每个单格格加外框

图6  数据区域加阴影

图7  多种颜色按序排列

   

图8  随机色加框(左)  圆点状+阴影(右)

(关于随机色的生成,见我的另一篇文章:在.net(C#)中随机生成较深的颜色 )

图9  数据区用底图纹理填充并单元格加框

图10  数据区纹理填充加阴影,整体加外框

图11  数据区使用圆形点状且用纹理图填充

2、以下为各种彩色艺术二维码的样式:

艺术图1   双色(前景为淡草绿、背景白色) + 圆角 + 附加图形

艺术图2   艺术二维码(旋转 + 纹理填充 + 附加图形)

艺术图3  圆形点状 + 纹理填充 + 附加图形

艺术图4   双色 + 艺术化排列 + 附加图形 + 文字说明

艺术图5  双色 + 附加图形 + 圆角

艺术图6  纹理底图 +  圆角 + 附加图形 + 圆形点状 + 双色

艺术图7  附加图形

艺术图8  圆角 + 附图 + 彩色渐变

艺术图9   圆角 +  附加图形 + 数据区外框

艺术图10

艺术图11

艺术图12

艺术图13

艺术图14

艺术图15

说句实在话,上述艺术图形绝大多数是通过设计软件手工制作的,但采用编程方式来实现并不容易,不容易并不代表不能实现,只是需要花费更多的时间罢了。

二、枚举

1、根据填充样式(颜色及纹理),我把它分成五种:黑白色,双色,多种有序色,随机色,纹理图填充。

以下为枚举文件的核心代码:

public enum FillType
    {
        /// <summary>
        /// 普通样式
        /// </summary>
        [Description("普通样式:白底黑图")]
        BlackAndWhite,

/// <summary>
        /// 两种彩色
        /// </summary>
        [Description("前景、背景两种彩色")]
        Bicolored,

/// <summary>
        /// 多彩的(多种指定颜色)
        /// </summary>
        [Description("多种指定颜色顺序排列")]
        Multicolored,
             
        /// <summary>
        /// 随机色的
        /// </summary>
        [Description("随机色样式")]
        RandomColored,

/// <summary>
        /// 纹理图填充
        /// </summary>
        [Description("纹理图填充)")]
        Textured
    }

3、根据单格形状,我把它分为三种:矩形块状,圆形点状、圆角状(拐角为圆角矩形)。

以下为C#枚举核心代码:

public enum ShapeType
    {
        /// <summary>
        /// 矩形块状
        /// </summary>
        [Description("矩形块状")]
        Block,

/// <summary>
        /// 圆形点状
        /// </summary>
        [Description("圆形点状")]
        Dotted,

/// <summary>
        /// 圆角(仅拐角处呈圆形矩形)
        /// </summary>
        [Description("圆角(仅拐角处呈圆形矩形)")]
        RadiusCorner
    }

4、根据修饰样式,我分为七种情况,以下为枚举核心代码:

public enum DecorativeType
    {
        /// <summary>
        /// 单元格外框
        /// </summary>
        [Description("单元格外框")]
        CellBorder = 1,

/// <summary>
        /// 数据区外框
        /// </summary>
        [Description("数据区外框")]
        CoreDataBorder = 2,
       
        /// <summary>
        /// 整体加线框(空白区域为四倍于单元格)
        /// </summary>
        [Description("整体加线框(空白区域为四倍于单元格)")]
        OuterBorder = 4,

/// <summary>
        /// 加阴影
        /// </summary>
        [Description("加阴影")]
        Shadowed = 8,

/// <summary>
        /// 附加图形
        /// </summary>
        [Description("附加图形")]
        AppendImages = 16,

/// <summary>
        /// 位置探测图形给特定颜色(DifferentColorOfPositionDetectionPattern)
        /// </summary>
        [Description("位置探测图形给特定颜色")]
        DifferentColorPattern = 32,

/// <summary>
        /// 修饰类边框
        /// </summary>
        [Description("修饰类边框")]
        DecorativeBorder = 64
    }

三、类构造及实现(仅讲思路):

1、建一个IPainter接口,里面有一个Draw()方法。

interface IPainter
    {
        Bitmap Draw();
    }

2、在此继承出一个IQRCodePainter接口,里面增加定义相关图形样式的公有属性。
    interface IQRCodePainter : IPainter
    {
        FillType FillType { get; set; }
        ShapeType ShapeType { get; set; }
        DecorativeType DecorativeType { get; set; }
        string Name { get; set; }
        string Content { get; set; }
        QRCodeEncoder QRCodeEncoder { get; set; }
        Encoding Encoding { get; set; }
        int QRCodeScale { get; set; }
    }

3、接下来就是建一个CodePainter类了,由于它是具体实例的概括抽象,所以,就使用了public abstract 关键字:

public abstract class CodePainter : IQRCodePainter

{

//实现IQRCodePainter相关公共属性的代码

//以及实现相关实例所必须的公共方法

(太长,略。这里仅说思路)

//还有就是:

public abstract Bitmap Draw(); //这个由具体的实例类去Override即可。

}

4、实现实例化的类

根据填充样式,写出五个类:

BlackAndWhitePainter,
BicoloredPainter,
MulticoloredPainter,
RandomColoredPainter,
TexturedPainter

里面根据形状不同及修饰样式的不同而做不同的绘制处理。需要说明的是:FillType, ShapeType是单一关系,而DecorativeType是叠加关系,所以,前两者没有使用倍增式数字枚举值,而DecorativeType则使用了1,2,4,8……枚举值方式,以方便实现效果叠加处理。

5、测试界面的设计(用图说话):

题外话:

今天在上传相关图像时才发现,使用C# GDI+图片保存功能时,保存好的图片居然在CSDN博客图像上传时无法上传图片!报错:

* The filetype you are attempting to upload is not allowed.

但这些图片在ACDSEE及WINDOWS自带画图工具中均可以打开,但在Photoshop中却无法打开。后来将同样的图片在WINDOWS自带画图工具中打开另存为之后,发现图片文件大小倍增至原来的两倍左右!估计是GDI+中保存的图片不带相关格式的描述信息所致PS等软件无法识别。

C#彩色艺术化二维码样式设计(仅说思路)相关推荐

  1. C 彩色艺术化二维码样式设计(仅说思路)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 仅讲思路 ...

  2. 实验分享:用Python生成个性化二维码

    今天给大家带来一个简单的Python应用实验:生成个性二维码. 实验内容: 通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小.是否在现有图片的基础上生成.是否生成动态二维码.主要面 ...

  3. 【二维码】艺术二维码生成

    一.艺术二维码 艺术二维码是在原有的黑白二维码的基础上根据二维码解析方式再配合新兴的设计方法,进行二维码美化,制作出的形态各异二维码,具体分为静态二维码设计.动态二维码设计.3D二维码设计.创意二维码 ...

  4. 通通WPF随笔(3)——艺术二维码素材生成器

    最近公司让我开发一个条形码的生成控件,花了半天时间搞定觉得不过瘾,什么年代了该用二维码了吧.于是wiki了一下二维码的资料. 比较常见的就是QR码(Quick Response)即快速识别码,为了验证 ...

  5. python头像变二维码_学了Python之后,美化二维码如此简单

    二维码(2-dimensional bar code),又称QR Code,是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的.本教程将展示如何在原有黑白图片的 ...

  6. 怎样制作一个漂亮的艺术二维码?

    随着二维码的产生,很多应用场景下都能看到各种二维码的使用.比如:有黑白的二维码.动态的二维码.3D的二维码等等! 如果要求不高,那么我们就直接使用黑白二维码就可以了,那么对于那些设计感很强的用户需求来 ...

  7. 学了Python之后,美化二维码如此简单

    二维码(2-dimensional bar code),又称QR Code,是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的.本教程将展示如何在原有黑白图片的 ...

  8. 如何批量生成彩色渐变二维码

    平时我们在生活中见到的二维码大多是黑白的,其实还有彩色的二维码.彩色二维码不仅具有普通二维码的所有功能,还能呈现出个性化的样式,让人眼前一亮.今天小编就在中琅条码打印软件中给大家演示一下制作彩色渐变二 ...

  9. 微信扫码登录自定义二维码样式

    微信扫码登录自定义二维码样式 前言 Java生成data-url 1.工具类pom 2.代码实现 将data-url赋值给href 前言 今天在做web端扫码登录时,前端需要定义二维码的样式.官方文档 ...

最新文章

  1. java8新特性_Java8新特性之Date API|乐字节
  2. SD-WAN — 云专线(企业入云)
  3. Centos 6.5 搭建NFS服务器笔记
  4. 在 XML 中添加实体
  5. 封装 电流密度 重布线_具有周边硅通孔的晶圆级芯片封装有限元分析
  6. struts2中的session使用
  7. zabbix如何监控linux磁盘性能IO
  8. 计算机组成原理—cpu于主存的连接(例题)
  9. File Converter——万能格式转化神器
  10. vim配置运行python3快捷键_Linux VIM8 Python3 编辑器配置文件
  11. 中英文国际机场三字代码
  12. windows服务器登录记录查看
  13. [phyton]文件的简单读写练习
  14. 温度传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. html 滑动拼图验证,vue登录滑动拼图验证
  16. 1字符集 iso latin_附件一、ISO Latin-1字符集
  17. XCODE性能测试方法
  18. Eclipse 设置护眼背景色
  19. PS图层混合算法之二(线性加深,线性减淡,变亮,变暗)
  20. Go/Goland 开发笔记

热门文章

  1. 2020年“有史以来”全网最全1309道BAT大厂java面试题,mongodb原理知识
  2. 诱人福利:猎豹移动雇游轮带全员一块儿航海
  3. 自己制作dns解析服务器,如何使用自己的DNS服务器解析域名,架设自己的DNS服务器...
  4. linux rstudio 中文乱码,谈谈R中的乱码(一)
  5. coding码市提交代码
  6. wireshark抓包实验 分析 详解
  7. CCF CSP 公共钥匙盒 JAVA 201709-2 100分
  8. Online Tracking by Learning Discriminative Saliency Map with Convolutional Neural Network
  9. FrankMocap:A Monocular 3D Whole-Body Pose Estimation System via Regression and Integration 2021阅读理解
  10. win7系统ftp服务器密码修改,win7ftp服务器设置用户名密码设置