在Ruby

时间:2017-03-09 09:16:38

标签: ruby-on-rails ruby qr-code

我正在使用rQrCode在Ruby中生成QR码。但我想更改背景颜色或在生成的QR代码中间添加图像。我做了一些研究,却一无所获。

有没有人用Ruby实现它?或者您对它有任何想法吗?

非常感谢。

1 个答案:

答案 0 :(得分:7)

  

我使用rQrCode在Ruby中生成QR码。但我想改变背景颜色[...]

在将QR码创建为图像,ANSI,SVG或HTML表时,使用以下:color选项查看rQrCode documentation您更改QR码的填充颜色,如下所示:

require "rqrcode"

qrcode = RQRCode::QRCode.new("http://stackoverflow.com/questions/42691235/generate-qr-codes-with-a-logo-or-having-background-colors-in-ruby")
image = qrcode.as_png(color: "000")
svg = qrcode.as_svg(color: "000")
html = qrcode.as_html # `td.black { border-color: #000; }` in stylesheet
string = qrcode.as_ansi(dark: "\033[40m")

您也可以更改背景颜色,改为使用fill选项

qrcode = RQRCode::QRCode.new("http://stackoverflow.com/questions/42691235/generate-qr-codes-with-a-logo-or-having-background-colors-in-ruby")
image = qrcode.as_png(fill: "000")
svg = qrcode.as_svg(fill: "000")
html = qrcode.as_html # `table { background-color: #000; }` in stylesheet
string = qrcode.as_ansi(light: "\033[40m")

这些可以一起使用,也可以单独使用,由您决定。

但是,我会警告您,根据所用颜色的对比度,您或其他人的QR扫描仪可能无法读取。此外,将QR码黑色方块更改为不同的颜色可能会破坏QR码或不被扫描仪注册。

关于附加或合并图像

  

[...]或在生成的QR码中间添加图像。

像以前一样生成您的二维码,并给它一个Transparent background colour

# require "chunky_png" # this already required by `rqrcode`
require "rqrcode"

qrcode = RQRCode::QRCode.new("http://stackoverflow.com/questions/42691235/generate-qr-codes-with-a-logo-or-having-background-colors-in-ruby")

TRANSPARENT = ::ChunkyPNG::Color::TRANSPARENT
qr_image = qrcode.as_png(fill: TRANSPARENT, module_px_size: 4)

_您可以忽略module_px_size: 4选项,它在以下示例中很有用._

然后将您的徽标作为单独的图像加载,并撰写具有合理宽度和宽度的新图像。高度偏移;我将已知的较小图像置于较大图像中

logo = ChunkyPNG::Image.from_file("logo.png")

height = (logo.dimension.height / 2).floor - (qr_image.dimension.height / 2).floor
width  = (logo.dimension.width  / 2).floor - (qr_image.dimension.width  / 2).floor

qr_composed = logo.compose(qr_image, width, height)
qr_composed.save("qr_composed.png")

a QR code image (with a transparent background) overlaid a logo image

我在编写之前省略了逻辑来确定哪个是大图像,否则你可能会遇到一个越界错误,如此

~/gems/2.3.0/gems/chunky_png-1.3.8/lib/chunky_png/canvas/operations.rb:393:in `check_size_constraints!': Background image width is too small! (ChunkyPNG::OutOfBounds)

但是,您可以创建一个新的空白图像并合并徽标& QR码图像水平; e.g。

new_width  = logo.dimension.width + qr_image.dimension.width
qr_merged_horizontally = ChunkyPNG::Image.new(new_width, logo.dimension.height, ::ChunkyPNG::Color::WHITE)
qr_merged_horizontally.compose!(logo, 0, 0)
qr_merged_horizontally.compose!(qr_image, logo.dimension.width)
qr_merged_horizontally.save("qr_merged_horizontally.png")

logo and QR code position beside one another

或垂直; e.g。

new_height = logo.dimension.height + qr_image.dimension.height
qr_merged_vertically   = ChunkyPNG::Image.new(logo.dimension.width, new_height, ::ChunkyPNG::Color::WHITE)
qr_merged_vertically.compose!(logo, 0, 0)
qr_merged_vertically.compose!(qr_image, 0, logo.dimension.height)
qr_merged_vertically.save("qr_merged_vertically.png")

logo and QR code images stack vertically

分别合并它们的宽度或高度。

否则,需要更多外部信息或手动操作才能将图像彼此定位。

<强>参考文献: