Если вы обнаружите, что часто запускаете скрипты в терминале, почему бы не добавить к ним цветную пиксельную графику?
Есть несколько способов добиться этого, но один из самых надежных — использовать символ «▄», нижний полублок U+2584, который в основном квадратный, а затем назначить ему два цвета: один для фона и один для переднего плана.
Мы можем сохранить изображение как многострочную строку и связать каждый символ с другим цветом. Таким образом, мы также получаем простой, но удобный редактор Pixel Art Editor.
Мы можем удобно связать более темные цвета с более темными символами и наоборот, чтобы изображение выглядело реалистично и в редакторе.
Например:
const image = ` ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬ ╬╬╬╬╬╬╬╬╬╬████████████████╬╬╬╬╬╬╬╬╬╬ ╬╬╬╬╬╬╬╬██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒██╬╬╬╬╬╬╬╬ ╬╬╬╬╬╬██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██╬╬╬╬╬╬ ╬╬╬╬╬╬██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██╬╬╬╬╬╬ ╬╬╬╬╬╬██▓▓░░░░ ▒▒▒▒▒▒██╬╬╬╬╬╬ ╬╬╬╬╬╬██▓▓░░░░ ▒▒▒▒██╬╬╬╬╬╬ ╬╬╬╬╬╬██▓▓░░██ ██ ▒▒ ██╬╬╬╬╬╬ ╬╬╬╬╬╬██░░░░░░ ██╬╬╬╬╬╬ ╬╬╬╬╬╬██░░░░██████████ ██╬╬╬╬╬╬ ╬╬╬╬╬╬██░░░░░░ ██╬╬╬╬╬╬ ╬╬╬╬╬╬╬╬██░░░░░░ ██╬╬╬╬╬╬╬╬ ╬╬╬╬╬╬██░░██████░░░░░░░░░░ ██╬╬╬╬╬╬ ╬╬╬╬██░░ ██╬╬╬╬ ╬╬██░░ ██░░ ██╬╬ ╬╬██░░░░████░░░░ ░░░░ ████░░ ██╬╬ ╬╬██░░ ██░░ ██░░ ██╬╬ ╬╬██░░░░ ██▓▓▒▒▒▒▒▒▒▒▒▒██░░░░ ██╬╬ ╬╬╬╬████████▓▓▒▒▒▒▒▒▒▒▒▒████████╬╬╬╬ ╬╬╬╬╬╬╬╬╬╬██▓▓▒▒████▓▓▒▒██╬╬╬╬╬╬╬╬╬╬ ╬╬╬╬╬╬╬╬╬╬██████╬╬╬╬██████╬╬╬╬╬╬╬╬╬╬ ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬`
Что с этой цветовой палитрой:
Будет генерировать это:
Из-за вертикальной прямоугольной природы символов мы можем использовать двойные символы, чтобы сделать соотношение более реалистичным. Используя один символ, мы получили бы что-то растянутое по горизонтали, как в
const image = ` ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬ ╬╬╬╬╬████████╬╬╬╬╬ ╬╬╬╬█▒▒▒▓▓▓▓▓█╬╬╬╬ ╬╬╬█▒▒▒▓▓▓▓▓▓▓█╬╬╬ ╬╬╬█▒▒▒▓▓▓▓▓▓▓█╬╬╬ ╬╬╬█▒ ░░░░▓▓▓█╬╬╬ ╬╬╬█▒ ░░░░░▓▓█╬╬╬ ╬╬╬█▒ █░░░█░▓░█╬╬╬ ╬╬╬█ ░░░░░░░█╬╬╬ ╬╬╬█ █████░░░█╬╬╬ ╬╬╬█ ░░░░░░░█╬╬╬ ╬╬╬╬█ ░░░░░█╬╬╬╬ ╬╬╬█ ████████░█╬╬╬ ╬╬█ ░░░░░░░░░░░█╬╬ ╬█ ░░░░░░░░░█ ░░█╬ ╬█ ██ ░░░░██ ░█╬ ╬█ ░░█ ░░░░█ ░░█╬ ╬█ ░█▒▒▓▓▓▓█ ░█╬ ╬╬████▒▒▓▓▓▓████╬╬ ╬╬╬╬╬█▒▓██▒▓█╬╬╬╬╬ ╬╬╬╬╬███╬╬███╬╬╬╬╬ ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬`
Основной цикл для рендеринга изображения с цветом в терминале довольно прост:
for (var y = 0; y < height - 1; y += 2) { var row = [] for (var x = 0; x < width; x += xScale) { row.push(chalk['bgHex'](color[i[y][x]])['hex'](color[i[y + 1][x]])('▄')); } }
Он перемещается по осям x и y изображения и генерирует ряды («▄▄▄▄▄▄▄▄▄▄») цветных символов.
Ось Y сканируется с удвоенной скоростью, потому что нам нужно два пикселя для вывода одного символа (один используется для цвета фона, а другой — для цвета переднего плана).
Персонаж раскрашивается с помощью библиотеки chalk
.
Не также xScale
, который используется для правильного рендеринга двух изображений выше (с одиночным символом или двойным символом).
Если строки изображения нечетные, нам нужно иметь дело с последним рядом пикселей. Это было не так просто, в итоге я использовал пробел, задающий цвет фона:
if (height % 2 === 1) { var row = [] for (var x = 0; x < width; x += xScale) { row.push(chalk['bgHex'](color[i[height - 1][x]])(' ')); } }
Другие варианты, возможно, отобразят дополнительное пространство между строками.
Мы также можем добавить простую систему для добавления комментариев рядом с изображением:
outcome.push(indentation + row.join(‘’) + (comment && comment[y / 2] ? comment[y / 2] : “”))
Вот как мы можем, наконец, отобразить изображение в терминале:
const comment = ` Terminal Pixel Art` console.log( paint( image, “ “, comment, 2 ) )
Код доступен по адресу https://github.com/lucamug/terminal-pixel-art.
Это все!
Присылайте мне фрагменты кода и скриншоты, если вы собираетесь добавить пиксельную графику в свой терминал, и я поделюсь ими здесь!