You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Gregory Rudolph 369af2097d
Initial commit from fork
5 years ago
..
internal Initial commit from fork 5 years ago
.DS_Store Initial commit from fork 5 years ago
README.md Initial commit from fork 5 years ago
example.png Initial commit from fork 5 years ago
example.svg Initial commit from fork 5 years ago
image.go Initial commit from fork 5 years ago
image_test.go Initial commit from fork 5 years ago
test.svg Initial commit from fork 5 years ago

README.md

image

Introduction

Image is an chess image utility that converts board positions into SVG, or Scalable Vector Graphics, images. svgo, the only outside dependency, is used to construct the SVG document.

Usage

SVG

The SVG function is the primary exported function of the package. It writes an SVG document to the io.Writer given.

file, _ := os.Open("output.svg")
defer file.Close()
fenStr := "rnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b KQkq - 0 1"
pos := &chess.Position{}
pos.UnmarshalText([]byte(fenStr))
image.SVG(file, pos.Board())

Dark / Light Square Customization

The default colors, shown in the example SVG below, are (235, 209, 166) for light squares and (165, 117, 81) for dark squares. The light and dark squares can be customized using the SquareColors() option.

white := color.RGBA{255, 255, 255, 1}
gray := color.RGBA{120, 120, 120, 1}
sqrs := image.SquareColors(white, gray)
image.SVG(file, pos.Board(), sqrs)

Marked Squares

MarkSquares is designed to be used as an optional argument to the SVG function. It marks the given squares with the color. A possible usage includes marking squares of the previous move.

yellow := color.RGBA{255, 255, 0, 1}
mark := image.MarkSquares(yellow, chess.D2, chess.D4)
image.SVG(file, pos.Board(), mark)

Example Program

package main

import (
	"image/color"
	"log"
	"os"

	"github.com/notnil/chess"
	"github.com/notnil/chess/image"
)

func main() {
    // create file
    f, err := os.Create("example.svg")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()

    // create board position
    fenStr := "rnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b KQkq - 0 1"
    pos := &chess.Position{}
    if err := pos.UnmarshalText([]byte(fenStr)); err != nil {
        log.Fatal(err)
    }

    // write board SVG to file
    yellow := color.RGBA{255, 255, 0, 1}
    mark := image.MarkSquares(yellow, chess.D2, chess.D4)
    if err := image.SVG(f, pos.Board(), mark); err != nil {
        log.Fatal(err)
    }
}

Example Program Result

rnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b KQkq - 0 1