各位小朋友,今天老师要来教一种新的绘画手法,这个不需要素描那种细腻的笔触,也不需要油画那种丰富的色彩,只要一支够黑的笔,和适当的纸张即可。

 

 

我想现在大家应该没人不知道 QR code 了吧,在网站上、平面海报、电视墙、甚至你的发票上都会出现一个小小黑白黑白的方块,只要拿出你的智慧型手机,轻轻地扫描一下,手机就会带你去那个 code 里面的内容(虽然大部分都是广告),不过既然是绘画教室,我们就不探讨怎么利用 QR code 让你的事业更成功、如何交到女朋友或是男朋友之类的,这里只教你如何画画。

 

 

我们先来介绍一下 QR Code 的历史吧,这个一开始是由 Toyota 下面的 Denso Wave 在1994年发明出来的,本来是用来追踪车辆的,后来发展到现在大家都熟知用法,QR code一共有40种Version,第一种也是最简单的一种,一边有21个点(21 x 21),每多一个Version,每边就会多四个点(举例:Version2 就是 25 x25),到了Version 40,一边有177个点,点越多,可以容纳的字数就越多。根据订制的规格书,QR code 可以放四种东西,第一是数字,第二是英文字母加数字(和一些标点符号),第三种是8 bit的二元码,第四种是日文(好吧,因为这是日本人发明的)

 

每个 coding 系统都会有所谓的错误修正码(error correct code),这些码是外加在原本内容上面的,主要以防这个 code 在传输时,中间有些数字或是点被弄脏、弄丢了,我们可以借用这个多余的数字来还原我们原本的内容。QR code 用的是 Reed-Solomon error correction,这种么算的,我们这里也就不介绍,只要知道一点就是,这个演算法需要修正码长度等于要修正的码的两倍,听起来像是绕口令是吧,听我讲个例子就会明白了,假如说你的内容有100个字,在你传送时,有50个字消失了,假如你需要复原那50个字,你则需要100个字的修正码,所以你需要传送 200个字(其中100个字是修正码),然后你可以修正50个字,换句话说,你可以修正25% (50/200)的内文,目前 QR code 有定四种修正等级,最高可以回复到30%的字串。

 

 

好吧,我们来看看真正的QR code是怎么形成的,上图是一个Version 1的QR code,一边有21个小方块,各位看到那三个黑黑的方块了吗,那是用来辨认方位的,所以程式在扫描时,可以确认位置,那三个方块中间被一个像是斑马线的线连起来,那两条是用来让程式方便辨认座标的,黄色区域是Code的内容并且加上修正码,那各青色部份则是一些格式的设定(像是你要哪种的修正等级之类的)。

 

我们先来填填黄色区域,假设我们想要把文字”ABCDE123″ 转成 QR code,一开始,我们要先告诉这内容是哪种型态(数字、文字、还是日文),看我的文字是属于字母加上数字型,在QR code的定义里,这是0010(别忘了,在QR code的世界里,只有黑点跟白点,也就是0跟1),这也是黄色区的起头,接下来,我们要告诉decoder,这串文字有多长,那串文字一共有八个字母,在二进位中是1000,在Version 1-9,QR code给你9 bit来定义长度,所以前面要加上五个零来凑成9 bit,所以我们的字母就便成了

 

0010 000001000 (前四个是型态 后九个是长度)

 

接下来我们要来进入真正的文字内容了,大家看看上面那个表,每个数字和字母都有一个代表的值,在QR code中是用每两个字母来分别编码,每两个字母给你11 bit来用,用我们上述的例子,我们得把内容分为”AB”, “CD”,”E1″,”23″来看,先来看”AB”,A在那个表中是10,B是11,QR code规定的计算公式是用10x 45+11 = 461,为什么要乘以45呢?大家看一下那个表一共有45个值(有点像是45进位),然后我们再把461换成2进位也就是 00111001101,在加上我们之前的编码就变成了 0010 00000100 00111001101,以此类推,我们也可以算出”CD”, “E1″,”23″的值。

 

 

等文字全部都转换完成 我们在结尾加入 0000当做结尾,最后得出以下的字串

 

0010 000001000 00111001101 01000101001 01001110111 00001011101 0000

 

我们把这一串数字整理一下,让它变成8 bit 一组,假如不足8 就用0把它补足

 

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000

 

我们现在得到了 8 组 8 bit的数据,但是即使在 Version 1 和最多的修正码下,QR code 可以容纳 9 组 8bit 的数据 (看表),所以我们在后面在填上了一组11101100 (万一要填两组以上,第二组要填 00010001,第三组再填11101100 轮流交替填这两组直到到容纳上限为止)

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000 11101100

 

好了,这就是我们所有的内文了。

 

接下来我们要学怎么来填这个格子,我们来看看上面这张图,填格子要从最下面左边开始填,你可照上面的,先填四个,以后都是八个八个填,也可以直接用8个来填,这个规则是这样的,先往左边填,两个一组,填到第二个,退回原来一个,然后往上,万一不能往上,就往下,万一不能往下,就往左(反正无论怎样都不会往右就是了),假如字串是0,就不填,是1就把格子涂满。

 

 

最后画出来就是这样,大家会不会觉得奇怪,怎么画出来有点少阿,还有老师是不是作弊,明明就只需要黑笔,为什么最后出现红色呢?画出来有点少,是因为我们还缺乏修正码,那些红色的条是拿来填格式的资讯的,我先把它涂红下来,免得画错…(好吧,我还是做了点弊),至于怎么补那些红条和剩下的空白呢?那请各位期待102拉。(其实是老师黑色笔没水了)

 

最后在这个圣诞夜,想祝大家佳节愉快,或许在台湾感受不深,不过圣诞夜可是西方重要节日,希望大家都有一个美好的圣诞夜。

 

 

 

图片来源:来源来源

参考来源:来源来源

本文转载自 Mr./Ms. Days