Пиксель арт сайт: Free Online Art Community and Pixel Art Tool

Мир Pixelated: Веб-сайты Pixel Art

Pixel Art ассоциируется со старыми компьютерными и видео консольными играми. Как правило, он делится на две подкатегории: изометрические и неизометрические. Изометрический вид часто встречается в компьютерных играх с использованием трехмерного изображения без реальной трехмерной обработки. Неизометрическая пиксельная графика – это пиксельная графика с видами сверху, сбоку, спереди, снизу или в перспективе. Поскольку компьютерная графика улучшилась, пиксельная графика стала выглядеть немного устаревшей и неуклюжей, но в последние годы, кажется, все больше и больше ценят ретро и этот тип цифрового искусства.

Изометрические Пиксель Арт
Изображения из Википедии
Не изометрические

Сегодня мы регулярно видим этот тип цифрового искусства на маленьких компьютерных иконках, но пиксельная графика также использовалась для иллюстрации журнальных статей, телевизионной рекламы и веб-сайтов.

Ниже вы найдете подборку веб-сайтов, которые используют пиксельную графику для создания уникального внешнего вида, а также некоторые ресурсы для обмена и изучения того, как создать свою собственную пиксельную графику.

Eboy , несомненно, является одним из самых известных поставщиков Pixel Art. Они создают повторно используемые пиксельные объекты и используют их для создания сложных и расширяемых иллюстраций и игрушек. Их работы были показаны в журналах Wired, Popular Science и Fortune 500.

Другой известный сайт по пиксельной графике – это Flip Flop Flyin ‘ от художника Крейга Робинсона, который умеет делать пиксели симпатичными.

Army Of Trolls – это сайт портфолио цифрового художника Гари Луккена, в котором представлены невероятно подробные пиксельные рисунки, на которые сильно повлияла его любовь к видеоиграм.

Goon Tower – совместный проект пользователей форума SomethingAwful.com. Каждый этаж башни был построен / нарисован другим пользователем.

Space Invaders – это сайт, созданный цифровым художником Invader. Идея состоит в том, чтобы «вторгаться» в города по всему миру с персонажами, вдохновленными аркадными играми первого поколения, и особенно теперь классическими Space Invaders.

Между множеством полос прокрутки и пиксельной графикой китайский сайт Love Pixel определенно выглядит как компьютерное ретро.

Нарушения зрения от Polyfonken – это всего лишь одна из частей большого сайта, посвященного музыке и искусству. Этот раздел включает в себя множество

Карта Pixel Art в Гонконге, созданная Эдуши, в этом году получила широкое распространение в Интернете. Это в основном Гонконг в трех измерениях на Картах Google, но со всеми зданиями и структурами, созданными как пиксель-арт. Супер пупер.

Если вы большой поклонник Pixel Art и хотели бы продемонстрировать свою собственную работу или поучиться на онлайн-уроках, то вам следует обратиться к сообществу Pixel Joint, где вы найдете множество единомышленников, которые любят свои пиксели.

Пиксель арт уроки

Если вы хотите научиться делать этот вид искусства самостоятельно, ознакомьтесь с этими уроками:

Углубленное руководство по пиксельной графике от Дерека Ю

Обзор пиксельной графики от Drububu

Небольшая коллекция техник пиксельной графики от Nasc

Какие еще сайты по пиксельной графике вас впечатлили?

Пишем Pixel Art Maker на JavaScript / Хабр

Доброго времени суток, друзья!

Предисловие

Однажды веб серфинг привел меня к этому.

Позже обнаружил статью про то, как это работает.

Казалось бы, ничего особенного — Пикачу, нарисованный средствами CSS. Данная техника называется Pixel Art (пиксельное искусство?). Что меня поразило, так это трудоемкость процесса. Каждая клеточка раскрашивается вручную (ну, почти; благо существуют препроцессоры; Sass в данном случае). Конечно, красота требует жертв. Однако разработчик — существо ленивое. Посему я задумался об автоматизации. Так появилось то, что я назвал Pixel Art Maker.

Условия

Что мы хотим получить?

Нам нужна программа, генерирующая заданное количество клеточек с возможностью их раскрашивания произвольными цветами.

Вот парочка примеров из сети:

  • пример 1
  • пример 2
Дополнительные функции:

  • форма клеточек — квадрат или круг
  • ширина клеточек в пикселях
  • количество клеточек
  • цвет фона
  • цвет для раскрашивания
  • функция создания холста
  • функция отображения номеров клеточек
  • функция сохранения/удаления изображения
  • функция очистки холста
  • функция удаления холста
Более мелкие детали обсудим в процессе кодинга.

Итак, поехали.

Разметка

Для реализации необходимого функционала наш HTML должен выглядеть примерно так:

<!-- создаем контейнер для инструментов -->
<div>
    <!-- создаем контейнер для формы фигур (клеточек) -->
    <div>
        <p>Shape Form</p>
        <select>
            <!-- квадрат -->
            <option value="squares">Square</option>
            <!-- круг -->
            <option value="circles">Circle</option>
        </select>
    </div>
    <!-- создаем контейнер для ширины и количества клеточек -->
    <div>
        <!-- ширина -->
        <div>
            <!-- устанавливаем диапазон от 10 до 50 (объяснение ниже) -->
            <p>Shape Width <br> <span>(from 10 to 50)</span></p>
            <input type="number" value="20">
        </div>
        <!-- количество -->
        <div>
            <!-- устанавливаем аналогичный диапазон -->
            <p>Shape Number <br> <span>(from 10 to 50)</span></p>
            <input type="number" value="30">
        </div>
    </div>
    <!-- создаем контейнер для цветов -->
    <div>
        <!-- цвет фона -->
        <div>
            <p>Background Color</p>
            <input type="color" value="#ffff00" required>
        </div>
        <!-- цвет фигуры (для раскрашивания) -->
        <div>
            <p>Shape Color</p>
            <input type="color" value="#0000ff">
        </div>
    </div>
    <!-- создаем контейнер для кнопок -->
    <div>
        <!-- кнопка для создания холста -->
        <input type="button" value="Generate Canvas">
        <!-- кнопка для показа/скрытия номеров клеточек (фигур) -->
        <input type="button" value="Show/Hide Numbers">
        <!-- кнопка сохранения/удаления изображения (результата) -->
        <input type="button" value="Save/Delete Image">
        <!-- кнопка для очистки холста с сохранением ширины и количества фигур -->
        <input type="button" value="Clear Canvas">
        <!-- кнопка для полного удаления холста -->
        <input type="button" value="Delete Canvas">
    </div>
</div>
<!-- холст -->
<canvas></canvas>
Диапазон (лимит) значений для ширины и количества клеточек определялся опытным путем.
Эксперименты показали, что меньшие/большие значения нецелесообразны по причинам чрезмерной детализации (для значений < 10 для ширины), снижения производительности (для значений > 50 для количества) и т.д.

Стили

В стилях у нас ничего особенного.

CSS:

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body {
    margin: 0;
    min-height: 100vh;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    align-content: flex-start;
}
h2 {
    width: 100%;
    text-align: center;
    font-size: 2.4em;
    color: #222;
}
.tools {
    height: 100%;
    display: inherit;
    flex-direction: column;
    margin: 0;
    font-size: 1.1em;
}
.buttons {
    display: inherit;
    flex-direction: column;
    align-items: center;
}
div {
    margin: .25em;
    text-align: center;
}
p {
    margin: .25em 0;
    user-select: none;
}
select {
    padding: .25em .5em;
    font-size: .8em;
}
input,
select {
    outline: none;
    cursor: pointer;
}
input[type="number"] {
    width: 30%;
    padding: .
25em 0; text-align: center; font-size: .8em; } input[type="color"] { width: 30px; height: 30px; } .buttons input { width: 80%; padding: .5em; margin-bottom: .5em; font-size: .8em; } .examples { position: absolute; top: 0; right: 0; } a { display: block; } span { font-size: .8em; } canvas { display: none; margin: 1em; cursor: pointer; box-shadow: 0 0 1px #222; }

JavaScript

Определяем холст и его контекст (2D контекст рисования):

let c = document.querySelector('canvas'),
    $ = c.getContext('2d')
Находим кнопку для создания холста и «вешаем» на нее обработчик события «клик»:

document.querySelector('.generate').onclick = generateCanvas
Весь дальнейший код будет находиться в функции «generateCanvas»:

function generateCanvas(){
    ...
}
Определяем форму, ширину, количество по горизонтали и общее количество (холст представляет собой одинаковое количество клеточек по горизонтали и вертикали), а также цвет фона:

// форма
let shapeForm = document. querySelector('select').value
// ширина (только целые числа)
let shapeWidth = parseInt(document.querySelector('.shapeWidth').value)
// количество по горизонтали (только целые числа)
let shapeNumber = parseInt(document.querySelector('.shapeNumber').value)
// общее количество (удваиваем количество по горизонтали)
let shapeAmount = Math.pow(shapeNumber, 2)
// цвет фона
let backColor = document.querySelector('.backColor').value
Определяем размер холста и устанавливаем ему соответствующие атрибуты (помним, что правильный размер холста устанавливается через атрибуты):

// ширина = высота = ширина клеточки * количество клеточек по горизонтали
let W = H = shapeWidth * shapeNumber
c.setAttribute('width', W)
c.setAttribute('height', H)
Некоторые дополнительные настройки:

// ширина границ
let border = 1
// цвет границ
let borderColor = 'rgba(0,0,0,.4)'
// по умолчанию номера фигур не отображаются
let isShown = false
// проверяем соблюдение диапазона значений
// и числового формата данных
// отображаем холст
// и в зависимости от формы фигуры запускаем соответствующую функцию
if (shapeWidth < 10 || shapeWidth > 50 || shapeNumber < 10 || shapeNumber > 50 || isNaN(shapeWidth) || isNaN(shapeNumber)) {
    throw new Error(alert('wrong number'))
} else if (shapeForm == 'squares') {
    c. style.display = 'block'
    squares()
} else {
    c.style.display = 'block'
    circles()
}
Вот как выглядит функция «squares»:

function squares() {
    // определяем начальные координаты
    let x = y = 0
    // массив фигур
    let squares = []
    // ширина и высота фигуры (квадрата)
    let w = h = shapeWidth
    // формируем необходимое количество фигур
    addSquares()
    // функция-конструктор
    function Square(x, y) {
        // координата х 
        this.x = x
        // координата y 
        this.y = y
        // цвет фигуры = цвет фона
        this.color = backColor
        // по умолчанию фигура не выбрана
        this.isSelected = false
    }
    // функция добавления фигур
    function addSquares() {
        // цикл по общему количеству фигур
        for (let i = 0; i < shapeAmount; i++) {
            // используем конструктор
            let square = new Square(x, y)
            // определяем координаты каждой фигуры
            // для этого к значению х прибавляем ширину фигуры
            x += w
            // когда значение х становится равным ширине холста
            // увеличиваем значение y на высоту фигуры
            // так осуществляется переход к следующей строке
            // сбрасываем значение х
            if (x == W) {
                y += h
                x = 0
            }
            // добавляем фигуру в массив
            squares. push(square)
        }
        // рисуем фигуры на холсте
        drawSquares()
    }
    // функция рисования фигур
    function drawSquares() {
        // очищаем холст
        $.clearRect(0, 0, W, H)
        // цикл по количеству фигур
        for (let i = 0; i < squares.length; i++) {
            // берем фигуру из массива
            let square = squares[i]
            // начинаем рисовать
            $.beginPath()
            // рисуем квадрат, используя координаты фигуры
            $.rect(square.x, square.y, w, h)
            // цвет фигуры
            $.fillStyle = square.color
            // ширина границ
            $.lineWidth = border
            // цвет границ
            $.strokeStyle = borderColor
            // заливаем фигуру
            $.fill()
            // обводим фигуру
            $.stroke()
            // если нажата кнопка для отображения номеров фигур
            if (isShown) {
                $.beginPath()
                // параметры шрифта
                $. font = '8pt Calibri'
                // цвет текста
                $.fillStyle = 'rgba(0,0,0,.6)'
                // рисуем номер, опираясь на его координаты
                $.fillText(i + 1, square.x, (square.y + 8))
            }
        }
    }
    // вешаем на холст обработчик события "клик"
    c.onclick = select
    // функция обработки клика
    function select(e) {
        // определяем координаты курсора
        let clickX = e.pageX - c.offsetLeft,
            clickY = e.pageY - c.offsetTop
        // цикл по количеству фигур
        for (let i = 0; i < squares.length; i++) {
            let square = squares[i]
            // определяем фигуру, по которой кликнули
            // пришлось повозиться
            // возможно, существует более изящное решение
            if (clickX > square.x && clickX < (square.x + w) && clickY > square.y && clickY < (square.y + h)) {
                // раскрашиваем фигуру, по которой кликнули, заданным цветом
                // при повторном клике возвращаем фигуре первоначальный цвет (цвет фона)
                if (square. isSelected == false) {
                    square.isSelected = true
                    square.color = document.querySelector('.shapeColor').value
                } else {
                    square.isSelected = false
                    square.color = backColor
                }
                // перерисовываем фигуры
                // в принципе, можно реализовать перерисовку только фигуры, по которой кликнули
                // но решение, по крайней мере у меня, получилось громоздким
                // решил, что игра не стоит свеч 
                drawSquares()
            }
        }
    }
    // находим кнопку для отображения номеров фигур и вешаем на нее обработчик события "клик"
    document.querySelector('.show').onclick = showNumbers
    // функция отображения номеров фигур
    function showNumbers() {
        if (!isShown) {
            isShown = true
            // цикл по количеству фигур 
            for (let i = 0; i < squares.length; i++) {
                let square = squares[i]
                $. beginPath()
                // параметры шрифта 
                $.font = '8pt Calibri'
                // цвет шрифта 
                $.fillStyle = 'rgba(0,0,0,.6)'
                // рисуем номер, опираясь на его координаты
                $.fillText(i + 1, square.x, (square.y + 8))
            }
        } else {
            isShown = false
        }
        // перерисовываем фигуры
        drawSquares()
    }
}
Функция «circles» очень похожа на функцию «squares».

JavaScript:

function circles() {
    // радиус круга
    let r = shapeWidth / 2
    let x = y = r
    let circles = []
    addCircles()
    function Circle(x, y) {
        this.x = x
        this.y = y
        this.color = backColor
        this.isSelected = false
    }
    function addCircles() {
        for (let i = 0; i < shapeAmount; i++) {
            let circle = new Circle(x, y)
            // к значению х прибавляется ширина фигуры
            x += shapeWidth
            // когда значение х становится равным сумме ширины холста и радиуса фигуры
            // увеличиваем значение у на ширину фигуры
            // сбрасываем значение х до значения радиуса
            if (x == W + r) {
                y += shapeWidth
                x = r
            }
            circles. push(circle)
        }
        drawCircles()
    }
    function drawCircles() {
        $.clearRect(0, 0, W, H)
        for (let i = 0; i < circles.length; i++) {
            let circle = circles[i]
            $.beginPath()
            // рисуем круг
            $.arc(circle.x, circle.y, r, 0, Math.PI * 2)
            $.fillStyle = circle.color
            $.strokeStyle = borderColor
            $.lineWidth = border
            $.fill()
            $.stroke()
            if (isShown) {
                $.beginPath()
                $.font = '8pt Calibri'
                $.fillStyle = 'rgba(0,0,0,.6)'
                $.fillText(i + 1, (circle.x - 8), circle.y)
            }
        }
    }
    c.onclick = select
    function select(e) {
        let clickX = e.pageX - c.offsetLeft,
            clickY = e.pageY - c.offsetTop
        for (let i = 0; i < circles.length; i++) {
            let circle = circles[i]
            // определяем круг, по которому кликнули
            let distanceFromCenter = Math. sqrt(Math.pow(circle.x - clickX, 2) + Math.pow(circle.y - clickY, 2))
            if (distanceFromCenter <= r) {
                if (circle.isSelected == false) {
                    circle.isSelected = true
                    circle.color = document.querySelector('.shapeColor').value
                } else {
                    circle.isSelected = false
                    circle.color = backColor
                }
                drawCircles()
            }
        }
    }
    document.querySelector('.show').onclick = showNumbers
    function showNumbers() {
        if (!isShown) {
            isShown = true
            for (let i = 0; i < circles.length; i++) {
                let circle = circles[i]
                $.beginPath()
                $.font = '8pt Calibri'
                $.fillStyle = 'rgba(0,0,0,.6)'
                $.fillText(i + 1, (circle.x - 8), circle.y)
            }
        } else {
            isShown = false
        }
        drawCircles()
    }
}
Находим кнопку для сохранения/удаления результата (изображения) и вешаем на нее обработчик события «клик»:

document. querySelector('.save').onclick = () => {
    // ищем изображение
    let img = document.querySelector('img')
    // если не находим, создаем
    // если находим, удаляем
    img == null ? document.body.appendChild(document.createElement('img')).src = c.toDataURL() : document.body.removeChild(img)
}
Находим кнопку для очистки холста и…:

document.querySelector('.clear').onclick = () => {
    // очищаем и перерисовываем холст
    $.clearRect(0, 0, W, H)
    generateCanvas()
}
Находим кнопку для удаления холста и…:

document.querySelector('.delete').onclick = () => {
    $.clearRect(0, 0, W, H)
    c.style.display = 'none'
}
Результат выглядит так:

Codepen (добавил парочку примеров использования)

Github

Благодарю за внимание.

Создать пиксель-арт — интерфейс (React)

Создавайте пиксельную графику для своих следующих проектов с помощью этого простого редактора пиксельной графики.

Загрузите свою работу в формате PNG или JPG.

Обзор проекта

Это был небольшой и интересный проект по созданию простой и творческой платформы. Приложение позволяет любому создавать пиксельные рисунки, изменять их и сохранять для последующего использования. Рисовать на компьютере — это здорово, потому что не нужно беспокоиться о материалах, навыках или таланте. Вы просто начинаете мазать.

Работая над этим проектом, я узнал больше о библиотеках и плагинах React, а также расширил свои знания об обработчиках событий в Javascript.

Технический обзор. палитра, которую пользователи могут использовать для своих рисунков

  • Изображение экспорта компонента React разрешен экспорт изображений в форматах png и jpeg

  • Ссылка на репозиторий GitHub: https://github.com/nldanne/drawing-pixels

    Просмотр в реальном времени

    Редактор размеров холста по умолчанию

    Основные функции

    1.

    Редактор размера холста

    Пользователи могут настроить размер холста, который они хотят использовать для пиксельной графики. По умолчанию это холст размером 16 x 16, а ширину и высоту можно изменить в соответствии с потребностями пользователя.

    Пиксель арт утки

    2. Палитра цветов

    Для палитры цветов компонент Circle предоставляется библиотекой цветов React. Это была простая интеграция в этот проект, который поставлялся с 18 предустановленными образцами цветов для использования, но при необходимости их можно было изменить в кодовой базе.

    Удалить цвет пикселя gif

    3. Удалить пиксель

    Пользователи могут ошибаться при создании своих пиксельных изображений. Они случайно использовали неправильный цвет или закрасили пиксель, который не хотели. Решение этих ошибок состоит в том, чтобы дважды щелкнуть проблемную область, что удалит данный цвет и вернет его обратно к цвету по умолчанию — белому.

    Что я узнал из этого проекта?

    Я научился использовать различные библиотеки реагирования для создания пользовательских интерфейсов и предоставления дополнительных функций этому приложению. Я вижу, как они используются на других типах платформ, от создателя резюме, чат-приложений и многих других. Создание этого проекта открыло мне глаза на поиск других библиотек и фреймворков, которые я могу интегрировать в свой процесс разработки.

    Будущие мысли:

    Пересматривая этот проект, я хотел бы добавить больше функций, которые сделают рисование в пиксель-арте более интуитивно понятным и настраиваемым. Прямо сейчас каждый пиксель требует взаимодействия с кликом, что затрудняет создание больших произведений искусства. Кроме того, принимая во внимание различные размеры устройств и вводы, которые сделают это приложение пригодным для использования на планшетах и ​​​​смартфонах. Но пока я буду изучать другие проекты, чтобы расширить свои знания в области фронтенд-разработки.

    Источники:

    Цветовая палитра взята из библиотеки цветов React. Экспорт изображения в формате png и jpg осуществляется благодаря библиотеке React Component Export Image. Проект был вдохновлен творчеством Александра Поповича.

    Напишите мне

    Давайте обсудим идеи и способы сотрудничества!

    Свяжитесь со мной

    Лучшие игры для Интернета с тегами Pixel Art

    Добавить в коллекцию

    Добавить в коллекцию

    Blackout

    Приключения в жутком доме!

    FRESH

    Приключения

    Играть в браузере

    Добавить в коллекцию

    Six Cats Under

    Ты умер. Ваше незаконченное дело? Судьба ваших многочисленных кошек!

    Team Bean Loop

    Головоломка

    Играть в браузере

    Добавить в коллекцию

    Добавить в коллекцию

    Добавить в коллекцию

    Добавить в коллекцию

    Last Train Home 9 0005

    Короткая игра про парня, застрявшего в поезде .

    чпо

    Приключение

    Играть в браузере

    Добавить в коллекцию

    NextDoor

    Короткий кинематографический пиксельный хоррор по мотивам манги Джунджи Ито

    Broelbrak

    Приключение

    Играть в браузере

    Добавить в коллекцию

    Портер

    Телепорт через головоломки и платформы!

    Blu

    Платформер

    Играть в браузере

    Добавить в коллекцию

    Добавить в коллекцию

    Добавить в коллекцию

    GIF

    Добавить в коллекцию

    Выбери Гальку-чан, Рок-кун или Стоун-сенсея. Прогуляйтесь по растущим растениям и насладитесь звуками природы. Добавить в коллекцию death adventure

    Нив 🦌

    Визуальная новелла

    Играть в браузере

    Добавить в коллекцию

    GIF

    Добавить в коллекцию

    Red Handed

    Стелс-игра, в которой нужно попасться 0002 Добавить в коллекцию

    MOBS, INC ★

    Победитель Ludum Dare 33 из 2700+ игр. «Ты Монстр». Сыграли более 2 миллионов раз.

    OVERBOY ツ

    Акция

    Играть в браузере

    Добавить в коллекцию

    Свободно

    Снимите шоу об охоте за привидениями. [Повествовательный хоррор]

    ribyrnes

    Играть в браузере

    GIF

    Добавить в коллекцию

    Добавить в коллекцию

    София?

    Странная приключенческая игра в стиле ролевых игр, в которой вы провели приятный вечер со своим парнем… или нет?

    Хатоге

    Приключения

    Играть в браузере

    GIF

    Добавить в коллекцию

    Веселый теннис

    Джон Топельски

    Спорт

    Играть в браузере

    Добавить в коллекцию

    Добавить в коллекцию

    PICOHOT

    8-битная дань уважения самому инновационному шутеру, в который я играл за последние годы.

    Тарковский

    Стрелок

    Играть в браузере

    Добавить в коллекцию

    Добавить в коллекцию

    GIF

    Добавить в коллекцию

    Добавить в коллекцию 900 05

    Добавить в коллекцию

    Добавить в коллекцию

    так глубоко , братан?

    Текстовая игра, в которой вы перемещаетесь в хитроумном пространстве подростка, который собирается посмотреть фильм со своим другом.

    moawling

    Visual Novel

    Играть в браузере

    Добавить в коллекцию

    Toe II Toe

    20-секундный слагфест! Бей, уклоняйся или блокируй свой путь к победе!

    Плазатин

    Драки

    Играть в браузере

    Добавить в коллекцию

    Добавить в коллекцию

    Симулятор Плохого Понедельника

    Битва против слияния Санса и Гарфилда — Сансфилд.

    Lumpy

    Ролевые игры

    Играть в браузере

    GIF

    Добавить в коллекцию

    GIF

    Добавить в коллекцию

    SELF

    я потерян без души

    dev_dwarf

    Платформер

    Играть в браузере

    GIF

    Добавить в коллекцию

    Gun Knight

    Рыцарь, который модифицирует свое оружие, меняя его приспособления.

    Оставить комментарий

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *