Split up Create banner finction

nmslib.CreateBanner() now calls nmslib.GenRawBanner() for the
majority of processing createbanner now just calls the gen func
and saves the file.

GenRawBanner() returns an image.Image type for more processing by
another function. this will be used for upcoming features.

tests have been updated as needed

upddated go.mod and go.sum
This commit is contained in:
Raum0x2A
2021-05-24 13:11:56 -06:00
parent 94f9b4e15c
commit b41f25646d
4 changed files with 40 additions and 17 deletions

View File

@@ -23,19 +23,40 @@ var opt int
* note first of the 2 bits sets the layout, the second bit sets the glyph color * note first of the 2 bits sets the layout, the second bit sets the glyph color
*/ */
func CreateBanner(portalhex string, savename string, opt int) (err error) { func CreateBanner(portalhex string, savename string, opt int) (err error) {
out, err := GenRawBanner(portalhex, opt)
if err != nil {
return
}
gg.SavePNG(savename+".png", out)
//gg.SaveJPG(savename+".jpg", out, 50)
return
}
/*GenRawBanner - Returns image.Image of genorated image
Requires 2 vars and returns image.Image (raw image data) and an error
var portalex string: Portal Glyph hex string
var opt int
00 sets horizontal banner in light mode [ 00 || 0 ]
01 sets horizontal banner in dark mode [ 01 || 1 ]
10 sets vertical banner in light mode
11 sets vertical banner in dark mode
* note first of the 2 bits sets the layout, the second bit sets the glyph color
*/
func GenRawBanner(portalhex string, layout int) (portalbanner image.Image, err error) {
var GlyphHex [12]int64 var GlyphHex [12]int64
var glyphImg [12]string var glyphImg [12]string
var mode string var mode string
var imgArray [12]image.Image var imgArray [12]image.Image
//Set light or dark mode glyphs //Set light or dark mode glyphs
if opt == 00 || opt == 10 { if layout == 00 || layout == 10 {
mode = "light" mode = "light"
} else if opt == 01 || opt == 11 { } else if layout == 01 || layout == 11 {
mode = "dark" mode = "dark"
} else { } else {
// if opt is an invalid option (ie. not a 2 bit binary number default to classic mode/layout // if layout is an invalid option (ie. not a 2 bit binary number default to classic mode/layout
opt = 0 layout = 0
mode = "light" mode = "light"
} }
@@ -45,7 +66,7 @@ func CreateBanner(portalhex string, savename string, opt int) (err error) {
for i := 0; i < len(portalhex); i++ { for i := 0; i < len(portalhex); i++ {
GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16) GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16)
if err != nil { if err != nil {
return errors.New("string provided is not hexadecimal ([0-9][A-F])") return nil, errors.New("string provided is not hexadecimal ([0-9][A-F])")
} }
} }
@@ -58,11 +79,11 @@ func CreateBanner(portalhex string, savename string, opt int) (err error) {
for k := 0; k < len(glyphImg); k++ { for k := 0; k < len(glyphImg); k++ {
data, err := Asset(glyphImg[k]) data, err := Asset(glyphImg[k])
if err != nil { if err != nil {
return errors.New("can not load images from assets: " + glyphImg[k]) return nil, errors.New("can not load images from assets: " + glyphImg[k])
} }
err = ioutil.WriteFile(NmsTemp+"/"+glyphImg[k], []byte(data), 0644) err = ioutil.WriteFile(NmsTemp+"/"+glyphImg[k], []byte(data), 0644)
if err != nil { if err != nil {
return errors.New("can not write file to temp directory") return nil, errors.New("can not write file to temp directory")
} }
} }
@@ -70,7 +91,7 @@ func CreateBanner(portalhex string, savename string, opt int) (err error) {
for iter := 0; iter < 12; iter++ { for iter := 0; iter < 12; iter++ {
imgArray[iter], err = gg.LoadPNG(NmsTemp + "/" + glyphImg[iter]) imgArray[iter], err = gg.LoadPNG(NmsTemp + "/" + glyphImg[iter])
if err != nil { if err != nil {
return errors.New("can not read glyph " + glyphImg[iter]) return nil, errors.New("can not read glyph " + glyphImg[iter])
} }
} }
@@ -78,28 +99,30 @@ func CreateBanner(portalhex string, savename string, opt int) (err error) {
// get image size of first glyph, all glyphs have the same X && Y dimension so we only need to measure one. // get image size of first glyph, all glyphs have the same X && Y dimension so we only need to measure one.
imgDim := imgArray[0].Bounds().Size() imgDim := imgArray[0].Bounds().Size()
//Set Layout
//classic horizontal layout //classic horizontal layout
if opt == 01 || opt == 00 { if layout == 01 || layout == 00 {
imgWidth := imgDim.X * 12 imgWidth := imgDim.X * 12
imgHeight := imgDim.Y imgHeight := imgDim.Y
concat := gg.NewContext(imgWidth, imgHeight) concat := gg.NewContext(imgWidth, imgHeight)
for a := 0; a < 12; a++ { for a := 0; a < 12; a++ {
concat.DrawImage(imgArray[a], imgDim.X*a, 0) concat.DrawImage(imgArray[a], imgDim.X*a, 0)
} }
concat.SavePNG(savename) return concat.Image(), nil
} }
//Vertical layout //Vertical layout
if opt == 10 || opt == 11 { if layout == 10 || layout == 11 {
imgWidth := imgDim.X imgWidth := imgDim.X
imgHeight := imgDim.Y * 12 imgHeight := imgDim.Y * 12
concat := gg.NewContext(imgWidth, imgHeight) concat := gg.NewContext(imgWidth, imgHeight)
for a := 0; a < 12; a++ { for a := 0; a < 12; a++ {
concat.DrawImage(imgArray[a], 0, imgDim.Y*a) concat.DrawImage(imgArray[a], 0, imgDim.Y*a)
} }
concat.SavePNG(savename) return concat.Image(), nil
} }
} else { } else {
return errors.New("portalcode must be exactly 12 chars") return nil, errors.New("portalcode must be exactly 12 chars")
} }
return return
} }

2
go.mod
View File

@@ -3,7 +3,7 @@ module gitlab.com/Raum0x2A/nmslib
go 1.16 go 1.16
require ( require (
github.com/fogleman/gg v1.3.0 github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e // indirect golang.org/x/image v0.0.0-20210504121937-7319ad40d33e // indirect
) )

4
go.sum
View File

@@ -1,5 +1,5 @@
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b h1:gqOBIAmkc/ZxXzFrM4wTub7tD0xYaOsaOQ5wOA74lJQ=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e h1:PzJMNfFQx+QO9hrC1GwZ4BoPGeNGhfeQEgcQFArEjPk= golang.org/x/image v0.0.0-20210504121937-7319ad40d33e h1:PzJMNfFQx+QO9hrC1GwZ4BoPGeNGhfeQEgcQFArEjPk=

View File

@@ -10,7 +10,7 @@ func TestCreateBanner(t *testing.T) {
rp := "21F2F8EDB94D" rp := "21F2F8EDB94D"
//rp := RndPortal() //rp := RndPortal()
fileout := "./test.png" fileout := "./test"
err := CreateBanner(rp, fileout, 0) err := CreateBanner(rp, fileout, 0)
if err != nil { if err != nil {