Haskell 生成错误的二维码
Haskell Generating Incorrect QR Code
我正在使用 this 库为 Google 验证器生成二维码。
不幸的是,当我扫描二维码时,它是不正确的。将 QR 码上传到 this 网站提供以下内容:
OTPAUTH%3A%2F%2FTOTP :0000000000000000000000000000000000000000000000000000000000000000000000000000000
在 totp
之后似乎出了点问题,但输入的下一部分是 %2F
,它已经出现了两次并得到了正确处理。
当我将输入的字符串放入this在线生成器时,二维码被正确生成了。
这是我的代码:
testQR :: IO ()
testQR = do
let path = "hello.pgm"
arrayToFile path
. toArray
. fromJust
. encode (fromJust $ version 1) M Alphanumeric
$ "otpauth%3A%2F%2Ftotp%2FLabel%3AJames%3Fsecret%3DGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ%26issuer%3DMyCompany"
我曾考虑过使用 haskell-qrencode
,但即使在安装 qrencode
之后我仍然收到一条错误提示 Missing C library: qrencode
。请随时提出解决此问题而不是上述问题的建议。
我在 diagrams-qrcode 方面取得了成功。
虽然不是我的问题的直接解决方案,但以下是我最终得到的结果。
我正在使用 haskell-qrencode
生成 QR 码,然后使用 JuicyPixels
创建 PNG 图像。
我现在的功能如下:
genQR :: String -> Base.String -> IO ()
genQR user s = do
let secret = mkSecretString s
url = mkURL user secret
path = "hello.png"
qr <- encodeString url Nothing QR_ECLEVEL_M QR_MODE_EIGHT True
let pixels = map (map (\case
0 -> 255 :: Pixel8
1 -> 0)) $ toMatrix qr
height = length pixels
width = length $ head pixels
pxGen = \x y -> pixels !! y !! x
image = generateImage pxGen width height
writePng path image
我正在使用 this 库为 Google 验证器生成二维码。
不幸的是,当我扫描二维码时,它是不正确的。将 QR 码上传到 this 网站提供以下内容:
OTPAUTH%3A%2F%2FTOTP :0000000000000000000000000000000000000000000000000000000000000000000000000000000
在 totp
之后似乎出了点问题,但输入的下一部分是 %2F
,它已经出现了两次并得到了正确处理。
当我将输入的字符串放入this在线生成器时,二维码被正确生成了。
这是我的代码:
testQR :: IO ()
testQR = do
let path = "hello.pgm"
arrayToFile path
. toArray
. fromJust
. encode (fromJust $ version 1) M Alphanumeric
$ "otpauth%3A%2F%2Ftotp%2FLabel%3AJames%3Fsecret%3DGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ%26issuer%3DMyCompany"
我曾考虑过使用 haskell-qrencode
,但即使在安装 qrencode
之后我仍然收到一条错误提示 Missing C library: qrencode
。请随时提出解决此问题而不是上述问题的建议。
我在 diagrams-qrcode 方面取得了成功。
虽然不是我的问题的直接解决方案,但以下是我最终得到的结果。
我正在使用 haskell-qrencode
生成 QR 码,然后使用 JuicyPixels
创建 PNG 图像。
我现在的功能如下:
genQR :: String -> Base.String -> IO ()
genQR user s = do
let secret = mkSecretString s
url = mkURL user secret
path = "hello.png"
qr <- encodeString url Nothing QR_ECLEVEL_M QR_MODE_EIGHT True
let pixels = map (map (\case
0 -> 255 :: Pixel8
1 -> 0)) $ toMatrix qr
height = length pixels
width = length $ head pixels
pxGen = \x y -> pixels !! y !! x
image = generateImage pxGen width height
writePng path image