mcbanner

package module
v0.0.0-...-323ba99 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2021 License: MIT Imports: 15 Imported by: 0

README

mcbanner

Application for generating Minecraft banners.

Includes

  • A web server/page showing the variations of Minecraft banners, as SVG approximations (mcweb).
  • A commandline application for evolving Minecraft banners with genetic algorithms (evolve).
  • Go code for generating a random SVG banner and rendering it as PNG by using rsvg-convert (random).

Original goal

  • Given an image, get the steps for creating the closest looking Minecraft banner. This goal is a work in progress, since the evolution is not rapid enough. Perhaps using smaller images when rendering from SVG, or another algorithm, would work.

General information

  • Version: 2.0.1
  • License: MIT

Documentation

Index

Constants

View Source
const (
	BannerW = 20
	BannerH = 40
)
View Source
const (
	POPSIZE        = 800
	MAXGENERATIONS = 50 // 3000
)
View Source
const (

	// Same order as minecraft.gamepedia.com/Banner
	PatternLowerThird     = iota // Base Fess Banner
	PatternUpperThird            // Chief Fess Banner
	PatternLeftThird             // Pale Dexter Banner
	PatternRightThird            // Pale Sinister Banner
	PatternCenterThird           // Pale Banner
	PatternHorizontalLine        // Fess Banner
	PatternDiagonal1             // Bend Banner
	PatternDiagonal2             // Bend Sinister Banner

	PatternDiaCross           // Saltire Banner
	PatternCross              // Cross Banner
	PatternUpperLeftTriangle  // Per Bend Sinister Banner
	PatternUpperRightTriangle // Per Bend Banner
	PatternLowerLeftTriangle  // Per Bend Inverted Banner
	PatternLowerRightTriangle // Per Bend Sinister Inverted Banner
	PatternLeftHalf           // Per Pale Banner
	PatternRightHalf          // Per Pale Inverted Banner
	PatternUpperHalf          // Per Fess Banner
	PatternLowerHalf          // Per Fess Inverted Banner
	PatternLowerLeftSquare    // Base Dexter Canton Banner
	PatternLowerRightSquare   // Base Sinister Canton Banner
	PatternUpperLeftSquare    // Chief Dexter Canton Banner
	PatternUpperRightSqaure   // Chief Sinister Canton Banner
	PatternLowerTriangle      // Chevron Banner
	PatternUpperTriangle      // Inverted Chevron Banner
	PatternLowerWaves         // Base Indented Banner
	PatternUpperWaves         // Chief Indented Banner
	PatternCircle             // Roundel Banner
	PatternDiamond            // Lozenge Banner
	PatternBorder             // Bordure Banner
	PatternWaveBorder         // Black/Dyed Borduer Indented Banner
	PatternBricks             // Black/Dyed Field Masoned Banner
	PatternGradientDown       // Gradient Banner
	PatternGradientUp         // Base Gradient Banner
	PatternCreeper            // Black/Dyed Creeper Charge Banner
	PatternSkull              // Black/Dyed Skull Charge Banner
	PatternFlower             // Black/Dyed Flower Charge Banner

	// Custom Patterns
	PatternFull // Background

	ColorWhite = iota
	ColorOrange
	ColorMagenta
	ColorLightBlue
	ColorYellow
	ColorLime
	ColorPink
	ColorGray
	ColorLightGray
	ColorCyan
	ColorPurple
	ColorBlue
	ColorBrown
	ColorGreen
	ColorRed
	ColorBlack

	// Custom Colors
	ColorBrightWhite
)

Variables

View Source
var PatternDesc = map[int]string{
	PatternLowerThird:     "Base Fess Banner",
	PatternUpperThird:     "Chief Fess Banner",
	PatternLeftThird:      "Pale Dexter Banner",
	PatternRightThird:     "Pale Sinister Banner",
	PatternCenterThird:    "Pale Banner",
	PatternHorizontalLine: "Fess Banner",
	PatternDiagonal1:      "Bend Banner",
	PatternDiagonal2:      "Bend Sinister Banner",

	PatternDiaCross:           "Saltire Banner",
	PatternCross:              "Cross Banner",
	PatternUpperLeftTriangle:  "Per Bend Sinister Banner",
	PatternUpperRightTriangle: "Per Bend Banner",
	PatternLowerLeftTriangle:  "Per Bend Inverted Banner",
	PatternLowerRightTriangle: "Per Bend Sinister Inverted Banner",
	PatternLeftHalf:           "Per Pale Banner",
	PatternRightHalf:          "Per Pale Inverted Banner",
	PatternUpperHalf:          "Per Fess Banner",
	PatternLowerHalf:          "Per Fess Inverted Banner",
	PatternLowerLeftSquare:    "Base Dexter Canton Banner",
	PatternLowerRightSquare:   "Base Sinister Canton Banner",
	PatternUpperLeftSquare:    "Chief Dexter Canton Banner",
	PatternUpperRightSqaure:   "Chief Sinister Canton Banner",
	PatternLowerTriangle:      "Chevron Banner",
	PatternUpperTriangle:      "Inverted Chevron Banner",
	PatternLowerWaves:         "Base Indented Banner",
	PatternUpperWaves:         "Chief Indented Banner",
	PatternCircle:             "Roundel Banner",
	PatternDiamond:            "Lozenge Banner",
	PatternBorder:             "Bordure Banner",
	PatternWaveBorder:         "Borduer Indented Banner",
	PatternBricks:             "Field Masoned Banner",
	PatternGradientDown:       "Gradient Banner",
	PatternGradientUp:         "Base Gradient Banner",
	PatternCreeper:            "Creeper Charge Banner",
	PatternSkull:              "Skull Charge Banner",
	PatternFlower:             "Flower Charge Banner",
	PatternLogo:               "Mojang Charge Banner",
	PatternFull:               "Background",
	// contains filtered or unexported fields
}

Functions

func Colordiff

func Colordiff(a, b uint32) float64

The difference between two color values, as float64 (0..1)

func Compare

func Compare(b *Banner, pngbytes []byte) float64

Compare a banner with a png file, return the likeness as float64

func Convert

func Convert(imagebytes []byte, fromformat, toformat string) []byte

Use rsvg to render svg (convert bytes from svg to png)

func Distance

func Distance(c1, c2 color.Color) float64

Find the distance between two colors, 0..1

func DrawPattern

func DrawPattern(svg *tinysvg.Tag, Pattern int, Color string)

func FindBest

func FindBest(fitnessfunction func([]byte, []byte) float64, png_bytes []byte, bestFilename string)

func Likeness

func Likeness(png1, png2 []byte) float64

Find how visually similar two images are, from 0..1 Does not take the human vision into account, only rgb values

func NewRandomBanner

func NewRandomBanner() (b *Banner, how []*Pattern)

func Seed

func Seed()

func Value

func Value(r, g, b uint32) float64

Lightness

func Valuediff

func Valuediff(a, b float64) float64

Types

type Banner struct {
	Patterns []*Pattern
	// contains filtered or unexported fields
}

func NewBanner

func NewBanner() *Banner

func (*Banner) AddPattern

func (b *Banner) AddPattern(p *Pattern)

func (*Banner) Draw

func (b *Banner) Draw(svg *tinysvg.Tag)

func (*Banner) Image

func (b *Banner) Image() *tinysvg.Document

Generate a new SVG image for the banner

func (*Banner) PNG

func (b *Banner) PNG() []byte

func (*Banner) SVG

func (b *Banner) SVG() []byte

type Pattern

type Pattern struct {
	// contains filtered or unexported fields
}

func NewPattern

func NewPattern(patId, Color int) (*Pattern, error)

func NewRandomPattern

func NewRandomPattern() Pattern

func (*Pattern) ColorString

func (pat *Pattern) ColorString() string

TODO: Switch the switch with a lookup like in PatternString

func (*Pattern) PatternString

func (pat *Pattern) PatternString() string

func (*Pattern) String

func (pat *Pattern) String() string

func (*Pattern) Valid

func (pat *Pattern) Valid() error

type Population

type Population []Solution

A population is a collection of solutions

func NewPopulation

func NewPopulation(size int) Population

type PopulationFitness

type PopulationFitness []float64

For storing the population fitnesses before sorting

func NewPopulationFitness

func NewPopulationFitness(popsize int) PopulationFitness

type Solution

type Solution []Pattern

A solution is up to maxPatterns Patterns

func NewRandomSolution

func NewRandomSolution() Solution

func (Solution) Banner

func (sol Solution) Banner() *Banner

func (Solution) String

func (sol Solution) String() string

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL