Reorg
This commit is contained in:
99
contactcard.go
Normal file
99
contactcard.go
Normal file
@ -0,0 +1,99 @@
|
||||
package meowlib
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/png"
|
||||
"log"
|
||||
"math"
|
||||
"os"
|
||||
|
||||
"github.com/makiuchi-d/gozxing"
|
||||
"github.com/makiuchi-d/gozxing/qrcode"
|
||||
)
|
||||
|
||||
func ServerFromUrl(url string) *Server {
|
||||
var s Server
|
||||
s.Url = url
|
||||
return &s
|
||||
}
|
||||
|
||||
func (contact *ContactCard) AddUrls(urls []string) {
|
||||
for _, url := range urls {
|
||||
contact.PullServers = append(contact.PullServers, ServerFromUrl(url))
|
||||
}
|
||||
}
|
||||
|
||||
func (contact *ContactCard) WritePng(filename string) {
|
||||
jsonContact, _ := json.Marshal(contact)
|
||||
//imgdata := base64.StdEncoding.EncodeToString(jsonContact)
|
||||
size := int(math.Sqrt(float64(len(jsonContact))/3)) + 1
|
||||
println(size)
|
||||
|
||||
// Create a colored i mage of the given width and height.
|
||||
img := image.NewNRGBA(image.Rect(0, 0, size, size))
|
||||
|
||||
for y := 0; y < size; y++ {
|
||||
for x := 0; x < size*3; x = x + 3 {
|
||||
p1 := uint8(jsonContact[x+y])
|
||||
p2 := uint8(jsonContact[x+y+1])
|
||||
p3 := uint8(jsonContact[x+y+2])
|
||||
img.Set(x/3, y, color.NRGBA{
|
||||
R: p1,
|
||||
G: p2,
|
||||
B: p3,
|
||||
A: 255,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
f, err := os.Create(filename)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if err := png.Encode(f, img); err != nil {
|
||||
f.Close()
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if err := f.Close(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (contact *ContactCard) WriteQr(filename string) {
|
||||
jsonContact, _ := json.Marshal(contact)
|
||||
qwriter := qrcode.NewQRCodeWriter()
|
||||
code, err := qwriter.Encode(string(jsonContact), gozxing.BarcodeFormat_QR_CODE, 512, 512, nil)
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
}
|
||||
file, _ := os.Create("barcode.png")
|
||||
defer file.Close()
|
||||
|
||||
// *BitMatrix implements the image.Image interface,
|
||||
// so it is able to be passed to png.Encode directly.
|
||||
_ = png.Encode(file, code)
|
||||
|
||||
}
|
||||
|
||||
func ReadQr(fielname string) ContactCard {
|
||||
var contact ContactCard
|
||||
// open and decode image file
|
||||
file, _ := os.Open("qrcode.jpg")
|
||||
img, _, _ := image.Decode(file)
|
||||
|
||||
// prepare BinaryBitmap
|
||||
bmp, _ := gozxing.NewBinaryBitmapFromImage(img)
|
||||
|
||||
// decode image
|
||||
qrReader := qrcode.NewQRCodeReader()
|
||||
result, _ := qrReader.Decode(bmp, nil)
|
||||
|
||||
fmt.Println(result)
|
||||
return contact
|
||||
}
|
Reference in New Issue
Block a user