Generate QR code

因为最近在知乎上搜到话题:你所见过的高质量学术海报是怎样的?,然后看到有人说打印一打A4纸,纸上是poster的缩小版,并且加上个人简介以及已发表文章的二维码。真不失为一个非常棒的推销自己的方法呀。学起来,首先从如何制作二维码开始。

首先,二维码可以通过现成的在线工具或者是APP做。著名的有草料二维码,这个超级简单呀,一点就出来了。

我用它做了一个我的博客的二维码,一分钟不到搞定。

img

虽然有很多的网站和APP可以制作二维码,但是作为一个码农,我还是要表达一下自己的存在感:写R代码制作二维码。

二维码又称QR Code,QR全称Quick Response。大概介绍一下二维码的原理:矩阵式二维条码是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。矩阵式二维条码是建立在计算机图像处理技术、组合编码原理等基础上的一种新型图形符号自动识读处理码制。我的理解就是将一个字符串编码成一个数字矩阵,然后将矩阵里面的数字对应到颜色,就制成了一个二维码图片。

在R中可以用 qrencoder 包来制作二维码。安装该包时会自动安装这三个依赖的包:sp, raster, png。

# install.packages("qrencoder")

qrencode: Return a QR encoded string as a matrix
qrencode_df: Return a QR encoded string as an x, y, z data.frame
qrencode_png: Return a QR encoded string as a base 64 encoded inline png
qrencode_raster: Return a QR encoded string as a raster object
qrencode_svg: Return a QR encoded string as an svg string

#Load library
suppressPackageStartupMessages(library(qrencoder))
suppressPackageStartupMessages(library(RColorBrewer))
suppressPackageStartupMessages(library(png))

#步骤1:准备好logo图片 (博客logo) 和需要编码的url (我的博客主页):
url <- 'http://chenyuan.date/'
color_set <- sample(brewer.pal(8, "Dark2"), 4)


#步骤二:先将url转换成0-1矩阵,再将矩阵中的1随机替换成1,2,3, 4 (表示其他四种颜色)
matrix <- qrencode(url)
matrix <- apply(matrix, 2, function(x) {x[x==1] <- sample(1:4, sum(x==1), replace = T); return(x)})

#步骤三:画没有logo的二维码
png("qrcode.png")
par(mar=c(0,0,0,0))
image(matrix, asp=1, col=c("white", color_set), axes=FALSE, xlab="", ylab="")
dev.off()

#步骤四:读入原始二维码和logo文件,将两个图片merge在一起
qrcode <- readPNG("qrcode.png")
logo <- readPNG("logo.png")

png("chenyuan-blog.png")
par(mar = c(0,0,0,0))
plot(0, type = 'n', xlim = c(0,1), ylim = c(0,1), ylab = '', xlab = '', axes = FALSE)
rasterImage(qrcode, xleft = 0, ybottom = 0, xright = 1, ytop = 1)
rasterImage(logo, xleft = 0.45, ybottom = 0.45, xright = 0.55, ytop = 0.55)
dev.off()
#中间插入的logo不能占太多地方呀,否则就把二维码的信息遮盖得太多,导致扫不出来码。
#因为我设置的颜色是随机的,效果好看不好看就看命了。所以如果想掌控颜色,自己设置特定颜色即可。

CHENYUAN

CHENYUAN
Pursuing the dream and the best future

CHENYUAN Blog Homepage

因为不想遗忘! 在这个信息大爆炸的年代,最重要的是对知识的消化-吸收-重铸。每天学了很多东西,但是理解的多少,以及能够运用多少是日后成功的关键。作为一个PhD,大脑中充斥了太多的东西,同时随着年龄的增长,难免会忘掉很多事情。所以只是为了在众多教程中写一个自己用到的,与自己...… Continue reading