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  }