Haskell生成不正确的QR码

时间:2018-05-30 11:47:06

标签: haskell qr-code

我正在使用this库为Google身份验证器生成二维码。

不幸的是,当我扫描QR码时,它是不正确的。将QR码上传到this网站提供以下内容:

OTPAUTH%3A%2F%2FTOTP :0000000000000000000000000000000000000000000000000000000000000000000000000000000

totp之后似乎出现了问题,但输入的下一部分是%2F,它已经出现了两次并且处理得当。

当我将输入字符串放入this在线生成器时,正确生成了QR码。

这是我的代码:

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,但即使安装了Missing C library: qrencode,我也会收到错误qrencode。请随意为此修改建议,而不是上述问题。

2 个答案:

答案 0 :(得分:0)

diagrams-qrcode取得了不错的成绩。

答案 1 :(得分:0)

虽然不是我问题的直接解决方案,但以下是我最终的结果。

我正在使用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