介绍
rqrcode
是一个用于生成 QR 码的 Ruby 库。它可以创建多种格式的二维码,并允许你将其嵌入到 Web 应用程序、电子邮件或文档中。rqrcode
通常用于 Rails 应用程序中,当需要生成二维码(例如,用于支付链接、票据或验证码)时非常方便。
安装
gem 'rqrcode'
入门案例
require 'rqrcode'
# 生成一个简单的二维码
qr = RQRCode::QRCode.new("https://example.com")
puts qr.to_s
高级选项
在将url生成为二维码时,我们可以指定一些高级选项来定义生成的二维码格式
选项 | 说明 |
---|---|
data | 需要被编码为二维码的数据,通常是url |
size | 二维码的大小,默认会根据数据的长度自动选择最小的尺寸 |
max_size | 二维码允许的最大尺寸 |
level | 二维码的纠错级别,表示二维码受损时可以恢复的程度。从低到高分别是:l、:m、:q、:h |
model | 二维码的编码模式:number :仅适用于纯数字数据。:alphanumeric :适用于字母和数字的组合(默认):byte_8bit :适用于8位字节数据,如一般的字符串(也是默认的)。:kanji :适用于日文的汉字编码。 |
使用方法如下:
simple_qrcode = RQRCodeCore::QRCode.new("https://kyan.com", size: 2, level: :m, mode: :byte_8bit)
渲染方式
在 rqrcode
中生成二维码时,提供了多种选项来定制生成的二维码样式和格式。不同的方法(如 as_svg
和 as_png
)支持不同的选项
png
选项 | 说明 | 示例/默认值 |
---|---|---|
offset | 设置二维码和图像边缘之间的距离 | offset: 10 |
color | 设置二维码的颜色。颜色以16进制格式表示,或者默认字符 | color: ‘black’ |
module_px_size | 每个二维码模块(方块)的大小,单位为像素 | module_px_size: 6 |
resize_exactly_to | 设置二维码是否应该被精确调整为 size 指定的尺寸(不推荐,可能使二维码失去比例) | resize_exactly_to: true |
file | 生成二维码同时保存到本地 | resize_exactly_to:nil |
fill | 填充颜色 | fill:’while‘ |
resize_gte_to | 是否允许自动缩放 | resize_gte_to: false |
color_mode | 设置图像的颜色模式。通常为 ChunkyPNG::COLOR_GRAYSCALE (灰度模式)或 ChunkyPNG::COLOR_TRUECOLOR (真彩模式)。 | color_mode: ChunkyPNG::COLOR_GRAYSCALE |
border_modules | 设置二维码外边框的宽度,表示边缘宽度。默认值为 4。 | border_modules: 4 |
bit_depth | 设置图像的位深度。通常可以设置为 1 表示黑白图像(最常用) | bit_depth: 1 |
def show
qrcode =RQRCode::QRCode.new("https://www.baidu.com/")
option = {
size: 200,
border_modules: 4,
color: 'black',
fill: 'white'
}
png = qrcode.as_png(option)
end
svg
选项 | 说明 | 实例/默认值 |
---|---|---|
offset | 设置二维码和图像边缘之间的距离 | offset: 10 |
fill | 填充颜色 | fill:’while‘ |
color | 设置二维码的颜色。颜色以16进制格式表示,或者默认字符 | color: ‘black’ |
module_size | 每个二维码模块(方块)的大小,单位为像素 | module_px_size: 6 |
shape_rendering | 处理边缘和形状,不建议使用,会影响二维码识别性 | shape_rendering:‘auto’ |
standalone | 生成 SVG 图像时指示是否将其作为独立的文件输出,包含完整的 XML 声明和文档类型定义 | standalone: true |
def show
qrcode =RQRCode::QRCode.new("https://www.baidu.com/")
option = {
border_modules: 4,
color: 'black',
fill: 'white'
}
svg = qrcode.as_svg(option)
end
base64
官方并未提供base64方法,因此需要使用一些工具
def show
qrcode =RQRCode::QRCode.new("https://www.baidu.com/")
option = {
size: 200,
border_modules: 4,
color: 'black',
fill: 'white'
}
png = qrcode.as_png(option)
base64_png = Base64.strict_encode64(png.to_s)
@base64_image = "data:image/png;base64,#{base64_png}"
end
渲染带二维码的logo
def show
qrcode = RQRCode::QRCode.new("https://www.baidu.com/")
png = qrcode.as_png(
size: 300,
border_modules: 4,
color: 'black',
fill: 'white'
)
# 读取png图片
logo = ChunkyPNG::Image.from_file('lib/images/logo.png')
logo_size = 60
logo_resized = logo.resize(logo_size, logo_size)
# logo和二维码合并
qr_image = ChunkyPNG::Image.from_blob(png.to_s)
qr_image.compose!(logo_resized, (qr_image.width - logo_resized.width) / 2, (qr_image.height - logo_resized.height) / 2)
base64_png = Base64.strict_encode64(qr_image.to_s)
@base64_image = "data:image/png;base64,#{base64_png}"
end