github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/optional/qr/init.go (about) 1 package qrimage 2 3 import ( 4 "image/png" 5 6 "github.com/boombuler/barcode" 7 "github.com/boombuler/barcode/qr" 8 "github.com/lmorg/murex/lang" 9 "github.com/lmorg/murex/lang/types" 10 ) 11 12 func init() { 13 lang.DefineMethod("qr", cmdQr, types.Any, "image") 14 } 15 16 func cmdQr(p *lang.Process) error { 17 if err := p.ErrIfNotAMethod(); err != nil { 18 p.Stdout.SetDataType(types.Null) 19 return err 20 } 21 22 p.Stdout.SetDataType("image") 23 24 b, err := p.Stdin.ReadAll() 25 if err != nil { 26 return err 27 } 28 29 // Create the barcode 30 qrCode, err := qr.Encode(string(b), qr.M, qr.Auto) 31 if err != nil { 32 return err 33 } 34 35 // Scale the barcode to 200x200 pixels 36 qrCode, _ = barcode.Scale(qrCode, 200, 200) 37 38 // encode the barcode as png 39 return png.Encode(p.Stdout, qrCode) 40 }