**resource.go/assets.go** * renamed `resources.go` to `assets.go` * added dark glyphs - located in assets.go -> assets/glyphs/dark/ * moved original glyphs - located in assets.go -> assets/glyph/light/ **glyphbanner.go** * added option to make glyphs vertical and/or dark **rpcg.go** * Added a random portal code generator this function takes no args and returns a string **README.md** * Fixed some typos (probably more to be fixed) * Added example of vertical portal banner * Added list of options for banner creation * Added example of ``nmslib.RndPortal()`` usage **go.mod** * updated go version to 1.16
111 lines
3.1 KiB
Go
111 lines
3.1 KiB
Go
package nmslib
|
|
|
|
import (
|
|
"fmt"
|
|
"image/png"
|
|
"io/ioutil"
|
|
"os"
|
|
"strconv"
|
|
|
|
gim "github.com/ozankasikci/go-image-merge"
|
|
)
|
|
|
|
/*CreateBanner - Output PNG of Portal Glyphs
|
|
Requires 3 vars and returns 0 var, Outputs a PNG file
|
|
var portalex string
|
|
Portal Glyph hex string
|
|
var savename string
|
|
Output name of PNG file
|
|
var opt int
|
|
00 sets horizontal banner in light mode
|
|
10 sets vertical banner in light mode
|
|
01 sets horizontal banner in dark mode
|
|
11 sets vertical banner in dark mode
|
|
*/
|
|
func CreateBanner(portalhex string, savename string, opt int) {
|
|
var err error
|
|
var GlyphHex [12]int64
|
|
var glyphImg [12]string
|
|
var mode string
|
|
var vert int
|
|
var horz int
|
|
|
|
// Setup temp dir
|
|
tempdir, err := ioutil.TempDir("", "nmslib-")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
//defer os.RemoveAll(tempdir)
|
|
|
|
// verify len of portalhex
|
|
if len(portalhex) == 12 {
|
|
// get hex value from each digit in given string to an array of int64
|
|
for i := 0; i < len(portalhex); i++ {
|
|
GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// set options
|
|
if opt == 00 { // set vertical rendering in light mode
|
|
vert, horz = 12, 1
|
|
mode = "light"
|
|
} else if opt == 01 { // set vertival in dark mode
|
|
vert, horz = 12, 1
|
|
mode = "dark"
|
|
} else if opt == 11 { // set horizontal rendering in dark mode
|
|
vert, horz = 1, 12
|
|
mode = "dark"
|
|
} else { // set horizontal rendering in light mode (classic/default)
|
|
vert, horz = 1, 12
|
|
mode = "light"
|
|
}
|
|
|
|
// assign image location of its glyph hex value to an array of strings
|
|
for j := 0; j < len(glyphImg); j++ {
|
|
glyphImg[j] = fmt.Sprintf("assets/glyphs/%s/PORTALSYMBOL.%X.png", mode, GlyphHex[j])
|
|
}
|
|
// pull images need from glyph.go and saved them to ./glyphs/
|
|
for k := 0; k < len(glyphImg); k++ {
|
|
data, err := Asset(glyphImg[k])
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
_, err2 := os.Stat(tempdir + "/assets/glyphs/" + mode + "/")
|
|
if os.IsNotExist(err2) {
|
|
errDir := os.MkdirAll(tempdir+"/assets/glyphs/"+mode, 0755)
|
|
if errDir != nil {
|
|
panic(errDir)
|
|
}
|
|
}
|
|
// fmt.Println(tempdir + "/" + glyphImg[k]) // for debugging only
|
|
err = ioutil.WriteFile(tempdir+"/"+glyphImg[k], []byte(data), 0644)
|
|
|
|
}
|
|
|
|
// load images for processing using github.com/ozankasikci/go-image-merge
|
|
grids := []*gim.Grid{
|
|
{ImageFilePath: tempdir + "/" + glyphImg[0]}, {ImageFilePath: tempdir + "/" + glyphImg[1]},
|
|
{ImageFilePath: tempdir + "/" + glyphImg[2]}, {ImageFilePath: tempdir + "/" + glyphImg[3]},
|
|
{ImageFilePath: tempdir + "/" + glyphImg[4]}, {ImageFilePath: tempdir + "/" + glyphImg[5]},
|
|
{ImageFilePath: tempdir + "/" + glyphImg[6]}, {ImageFilePath: tempdir + "/" + glyphImg[7]},
|
|
{ImageFilePath: tempdir + "/" + glyphImg[8]}, {ImageFilePath: tempdir + "/" + glyphImg[9]},
|
|
{ImageFilePath: tempdir + "/" + glyphImg[10]}, {ImageFilePath: tempdir + "/" + glyphImg[11]},
|
|
}
|
|
|
|
// create new image from grids
|
|
rgba, err := gim.New(grids, vert, horz).Merge()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// save the output to png
|
|
file, err := os.Create(savename)
|
|
err = png.Encode(file, rgba)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
}
|
|
}
|