66 lines
No EOL
3.5 KiB
Go
66 lines
No EOL
3.5 KiB
Go
package asciigen
|
||
|
||
// Palette — набор символов от тёмного к светлому (или наоборот при Invert).
|
||
type Palette string
|
||
|
||
const (
|
||
// PaletteBlocks — контрастная палитра, хорошо читается на глаз.
|
||
PaletteBlocks Palette = "@%#*+=-:. "
|
||
// PaletteMinimal — всего 2 символа, для мелких превью.
|
||
PaletteMinimal Palette = "#."
|
||
// PaletteDetailed — длинная градация, больше полутонов.
|
||
PaletteDetailed Palette = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`'. "
|
||
)
|
||
|
||
// ImageOptions — параметры рендера картинки в ASCII.
|
||
type ImageOptions struct {
|
||
Width int // ширина результата в символах
|
||
Height int // 0 = вычисляется автоматически по аспекту (клетка символа ~2:1)
|
||
Palette Palette
|
||
Invert bool // поменять местами тёмное/светлое
|
||
Color bool // цветной вывод через ANSI-коды (24-bit)
|
||
Gamma float64 // 1.0 = без изменений; <1 светлее тени, >1 контрастнее
|
||
}
|
||
|
||
// TextOptions — параметры рендера текстового баннера (FIGlet).
|
||
type TextOptions struct {
|
||
Font string // имя шрифта FIGlet, напр. "standard", "big", "slant", "block"
|
||
Width int // ширина переноса строк, 0 = без переноса
|
||
}
|
||
|
||
// defaultImagePresets — набор пресетов для первого экрана выбора.
|
||
// Каждый пресет — это отдельный Variant, а не отдельный алгоритм:
|
||
// меняются только Palette/Gamma/Invert поверх одного и того же движка.
|
||
func defaultImagePresets() map[string]ImageOptions {
|
||
return map[string]ImageOptions{
|
||
"blocks-standard": {Palette: PaletteBlocks, Gamma: 1.0},
|
||
"blocks-inverted": {Palette: PaletteBlocks, Gamma: 1.0, Invert: true},
|
||
"detailed": {Palette: PaletteDetailed, Gamma: 1.0},
|
||
"high-contrast": {Palette: PaletteBlocks, Gamma: 1.6},
|
||
"minimal": {Palette: PaletteMinimal, Gamma: 1.0},
|
||
}
|
||
}
|
||
|
||
// defaultFonts — пресеты шрифтов для текстового баннера.
|
||
// Список сверен со встроенными в go-figure шрифтами (пакет их держит
|
||
// вшитыми через go-bindata, так что это не файлы на диске, а константы
|
||
// имён). Подобраны по разнообразию стиля, а не просто первые в алфавите —
|
||
// иначе часть вариантов выглядела бы почти одинаково.
|
||
func defaultFonts() []string {
|
||
return []string{
|
||
"standard", // базовый, читаемый
|
||
"big", // крупный жирный
|
||
"slant", // курсив с наклоном
|
||
"small", // компактный
|
||
"block", // блочные буквы
|
||
"shadow", // с тенью
|
||
"banner", // широкий баннерный
|
||
"bubble", // "пузырьковые" буквы
|
||
"digital", // под LCD-индикатор
|
||
"doom", // угловатый, агрессивный
|
||
"graffiti", // граффити-стиль
|
||
"isometric1", // псевдо-3D
|
||
"larry3d", // объёмный 3D
|
||
"starwars", // тематический декоративный
|
||
}
|
||
} |