关于二维码分块上色(彩色二维码)的算法研究
众所周知,二维码通常是黑白的,而且是由若干个长方形或正方形小块平铺而成。但从人们的审美角度来看,常见的黑白二维码不免让人审美疲劳。本文试着从分块上色的角度对二维码进行美化,并尝试讲一下“美化”的编程思路。
一、缘由及目的:
首先,我们来看看正常情况下的黑白二维码,如图1:
图1 普通二维码(黑白条块)
上色的难点在于如何上色,上什么色,也就是哪些块“着”什么颜色。(关于彩色二维码的效果,请参考我的另一篇文章:《C#彩色艺术化二维码样式设计(仅说思路)》http://blog.csdn.net/johnsuna/article/details/7933619)
如果上错了色,也会成为“大花脸”,变得并不艺术。就好像漂亮的农村姑娘,如果穿上大花衣裳,看上去鲜艳,但仍然显示不出其天生的丽质,反而显得“很土”。如下图2及图3:
图2 大花脸式的彩色二维码
图3 单块随机色(彩色)二维码
而上色的难点在于分块,也就是将二维码分成多少块、如何分块,相关色块上什么颜色,后一个问题是美术工程师考虑的,不在本文讨论范围之内。从图1,图2来看,分块的归类并不容易或者说我们从外观上还不好判断哪些块分在一起成为一个大色块。
经过上面图3、下面图4的圆角化处理后,色块的划分是显而易见的。具体如何圆角化处理,请见我的另一篇文章《C#彩色艺术化二维码样式设计(仅说思路)》http://blog.csdn.net/johnsuna/article/details/7933619 及http://blog.csdn.net/johnsuna/article/details/7948907。
图4 圆角化艺术二维码(黑白色)
为了阐述方便,我将图1的关键块进行了编号,如下图5所示:
图5 对图1黑白二维码相关关键色块进行编号
与图5相对应,图6为圆角化分块后的带编号的图片:
图6 对图2的关键块进行编号
下图7为们我要的最终效果:
图7 最终需要的效果示意
尽管我的上色功夫(美感)不怎么样,但总体效果比图1-图4的效果确实好多了。
二、算法研究:
如下图8所示,为了方便讲述,我将图7中色块7、8、9、10、11中的每个单元格又按a,b,c……进行了编号并给每个单元格加了一个黑边框。
图8 单元格
图8中,单元格7a和7b最终组成一个竖条色块,单元格8为一个独立的色块,9a与9b组成一个横条色块,而10a,10b...f 又组成一个L形的色块。如图7所示,12-18等由多个单元格彼此相连而组成一个大的色块,其中,编号为16的色块面积最大。
接下来,重点研究算法。
首先必须找到分块的“点”,观察图7和图8,我们经过对比可以发现,分隔各块之间的交接点有一个共同的规律:交接点外围相邻对角均为空。
具体地说,就是:以“交接点”为中心的3*3个单元格区域(含交接点本身)内,如果该交接点的外围8个点中,有两个斜角(不管是呈现“/”或“\”,也不管是哪一个角位,如左上或右下,或左下或右上)的点均为空白,那么,此点必为分块关键点,也就是“交接点”。
经过观察和研究,还有一种办法,那就是“广度优先遍历”。如下图:
图9 单点水平/垂直延伸法示意
此算法也是棋牌或连连看等游戏常用的算法了。网上有很多类似的例子,就不再详解。另外,此算法可以与分形递归算法相结合,实现快速有效地对整个图像的分块上色。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
二维码彩色广告招牌的切割制作问题(C#.net下对彩色二维码圆角样式及改进)
原文: 二维码彩色广告招牌的切割制作问题(C#.net下对彩色二维码圆角样式及改进) 我们知道,目前二维码还很少用于广告招牌的制作。但随着智能手机越来越普及,互联网等网络的应用也越来越广泛,作为连接物理世界与网络世界的桥梁——二维码必定会大显身手。二维码为什么这么有用?其中一个重要原因是它可以通过图像来描述计算机信息数据,并通过手机、平板电脑等终端直接与互联网相连。 在此,讲一讲二维码广告招牌的简化制作及美化的问题。 一般类型的二维码样式为矩形块状样式,如下图A所示: 图A 图B (图B对图A的样式做了加色及圆角化处理) 图C 黑白矩形块状二维码(未做任何修饰) 由图C可知,如果招牌制作时采用图C进行制作时,会遇到制作中的零碎化,不易拼接和安装的问题——还记得有人将英文字母S和B上下反装吗?甚至有人会将6和9装倒了!更要命的是,上面这个还不够美观,客户说它不够好看! 图1 分为多个彩色块的二维码 对比图1和图C,很明显图1的制作方式会更容易加工些,安装也相对容易些。 可以看到,图1对上图C做了圆角化处理,将多余的棱角给“磨平”了,在无法磨圆的地方,补上了圆角进行填充,加上不...
- 下一篇
C#彩色艺术化二维码样式设计(仅说思路)
原文: C#彩色艺术化二维码样式设计(仅说思路) 仅讲思路,想要源码的请绕道。 一、样式 1、先看各种二维码的样式吧: (1)最简单的样式——黑白样式,如下图: 图1 最平常见到的二维码样式(如果你用智能手机,且已安装二维码扫描软件,扫描之后你会发现它就是一个网址:http://www.lgms.net) (2)以下为在基本样式的基础上进行的改进: 图2 圆形点状样式(为了保持可识别性,三个定位方块图没有圆形点状化)。 图3 加外框的圆形点状二维码 图4 双色二维码(白底红码) 图5 数据区的每个单格格加外框 图6 数据区域加阴影 图7 多种颜色按序排列 图8 随机色加框(左) 圆点状+阴影(右) (关于随机色的生成,见我的另一篇文章:在.net(C#)中随机生成较深的颜色 ) 图9 数据区用底图纹理填充并单元格加框 图10 数据区纹理填充加阴影,整体加外框 图11 数据区使用圆形点状且用纹理图填充 2、以下为各种彩色艺术二维码的样式: 艺术图1 双色(前景为淡草绿、背景白色) + 圆角 + 附加图形 艺术图2 艺术二维码(旋转 + 纹理填充 + 附加图形) 艺...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主