-
Notifications
You must be signed in to change notification settings - Fork 0
/
qrencode_links.hs
54 lines (47 loc) · 1.71 KB
/
qrencode_links.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import qualified Data.QRCode as QR
import qualified Data.Version as Version
import Diagrams.Backend.Cairo
import Diagrams.Backend.Cairo.Internal
import Diagrams.Prelude
import qualified Diagrams.QRCode as QR
import qualified Paths_qrencode as Package
import System.Directory
import System.Environment
import System.Exit (exitFailure)
import System.FilePath
qrencode qrVersion input =
QR.encodeString input
(Just qrVersion)
QR.QR_ECLEVEL_M
QR.QR_MODE_EIGHT
True
drawQRCode = centerXY
. sizedAs (square 1 :: D V2 Double)
. bg white
. fc black
. lw 0
. stroke
. QR.pathMatrix
. QR.toMatrix
main :: IO ()
main = do
args <- getArgs
case args of
[ linksFile
, pngSize
, outputDirectory ] -> do
links <- lines <$> readFile linksFile
let qrFiles = map (\link -> outputDirectory </> "qr_" ++ takeFileName link ++ ".png") links
qrs <- mapM ((drawQRCode <$>) . qrencode 3) links
let width = read pngSize
dims = dims2D width width
renderFile file = fst . renderDia Cairo (CairoOptions file dims PNG False)
createDirectoryIfMissing True outputDirectory
sequence_ $ zipWith renderFile qrFiles qrs
writeFile (outputDirectory </> "links.csv") $
unlines $ zipWith (\link file -> link ++ "," ++ takeFileName file)
links qrFiles
_ -> do
putStrLn $ "qrencode-links " ++ Version.showVersion Package.version
putStrLn $ "Usage: qrencode-links URL_FILE PNG_SIZE OUTPUT_DIRECTORY"
exitFailure