Градиент что это такое в рисовании

Градиенты: большой обзор

Рассказываем, какие бывают градиенты, как их создавать и как готовить к печати.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Оля Ежак для Skillbox Media

Градиенты используются в графическом, интерфейсном и информационном дизайне. Однако они не так просты, как хотелось бы: сложности могут возникнуть уже на этапе создания самого простого градиента и не закончиться даже при выводе на печать. Отдельная боль — столь модные сегодня mesh-градиенты. В этой статье мы расскажем всё, что вы должны знать о градиентах и работе с ними.

Из статьи вы узнаете:

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Ведущий интерфейсный дизайнер в K&K TEAM, увлечён дизайном, технологиями и людьми. В свободное время ведёт Telegram-канал «Karoza Ҩ».

Цветовые градиенты

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

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

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

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Один из интересных приёмов использования градиентов можно увидеть на схеме санкт-петербургского метро, предложенной Ильёй Бирманом. Линии, которые соединяют переходы с одной станции на другую, на карте соединяются плавным переходом цвета при помощи градиента.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Создание градиентов

Технически создание простого градиента не составляет труда, достаточно выбрать цвета для перехода, направление и тип градиента: Linear (линейный), Radial (круговой, радиальный), Angular (угловой, конусный), Diamond (ромбовидный, алмазный).

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

В Figma для создания градиента нужно выделить фигуру, затем в свойстве Fill выбрать тип градиента.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Для настройки цветов выделите точку градиента и укажите её цвет и непрозрачность.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Чтобы задать направление градиента, надо выделить точку на конце отрезка градиента и передвинуть её. Если в этот момент удерживать клавишу Shift, направление градиента будет кратно 45°.

Если надо добавить ещё один цвет в градиент, то надо кликнуть по линии между двумя цветами в нужном месте. Для удаления цвета кликните по точке и нажмите Delete на клавиатуре.

Точки градиента можно передвигать до достижения нужного результата.

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

Выбор градиентов

В Figma для работы с градиентами используют плагины Webgradients и uiGradients.

Первым делом нужно установить плагины в Figma Community, для этого на странице плагина нажмите на кнопку Install в правом верхнем углу.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

После установки вернитесь в свой проект, выделите любую фигуру, а затем запустите плагин.

Выбрать его можно через поиск, для этого нажмите клавиши Ctrl (⌘) и «/» одновременно, начните вводить название плагина и выберите нужный, кликнув по его названию. Либо можно нажать правую кнопку мыши на объекте, выбрать в открывшемся меню Plugins и кликнуть по названию плагина в появившемся списке. Первый вариант удобнее, если плагинов установлено много.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

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

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

В других редакторах градиенты часто добавляют в стандартные шаблоны, но можно воспользоваться веб-сервисом WebGradients, при помощи которого можно получить HEX-значения цветов градиента, CSS-код с параметрами или готовый к использованию файл PNG в размере 2400×2000 px.

Смягчение градиентов

При построении градиентов иногда возникает проблема слишком резких и заметных переходов, а ведь вся суть градиента в плавности. Такие градиенты надо смягчать, по-английски это называется Easing Gradients.

Особенно хорошо это заметно на градиентах от чёрного к прозрачному, которые добавляют поверх изображения для улучшения читаемости надписи.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Решить проблему жёстких переходов можно, добавив промежуточные точки в градиент, а также сместив точки градиента в более подходящее место.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Однако этот метод очень неудобный и долгий. К счастью, в Figma есть плагин Easing Gradients, который позволяет смягчать градиенты автоматически. После его установки нужно выделить фигуру и запустить плагин. В появившемся окне выберите Curve и Easy In Out, после чего нажмите Apply. Если вариант Easy In Out не устраивает, то в окне плагина можно менять настройки.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Если же необходимо смягчить градиент быстро, то существует второй плагин с похожим названием Easing Gradient, только без s на конце. После установки выделите фигуру и запустите плагин. Поскольку он не открывает окно, то получается быстрее, однако этот быстрый метод работает на градиентах только с двумя цветами.

Также для смягчения градиентов с дальнейшим экспортом в CSS используют веб-ресурс Easing Gradients, где в простом редакторе можно смягчить двухцветный градиент.

Грязные градиенты → чистые градиенты

При построении градиента между некоторыми насыщенными цветами возникает область сероватого оттенка посередине. Связано это с внутренним устройством RGB-пространства. Выглядит такой градиент грязно.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Убрать ненасыщенную область сероватого оттенка можно несколькими методами.

Промежуточная точка

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

Увеличивать насыщенность можно на глаз, передвигая кружок на цветовом поле. А можно перейти в режим HSB и увеличить значение параметра S (Saturation — насыщенность) — это позволит сохранить цветовой тон и яркость без изменений.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

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

По дуге

Когда мы строим градиенты по прямой, линия проходит через ненасыщенную середину, поэтому градиенты лучше строить по дуге.

UI Gradient Generator строит градиенты по дуге автоматически. Сервис сам сделает плавный цветовой переход, обойдя ненасыщенную середину круга RGB.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Для более качественного градиента переключите параметр Easing (смягчение градиента) на In/ Out, а Precision (количество промежуточных точек градиента) выберите максимально возможный. Далее градиент можно перенести в Figma вручную, копируя каждый цвет, либо скачать SVG-файл с градиентом через кнопку Export as SVG. Этот векторный файл нужно перетащить мышью в графический редактор. Если свойство градиента требуется перенести на другой объект, то выделите в Figma объект с градиентом, в свойстве Fill выделите градиент и нажмите Ctrl (⌘) + С. Затем выделите другой объект и нажмите Ctrl (⌘) + V.

Для разработчиков, которым нужно вставить градиент на сайт при помощи CSS, сервис создаёт код, который можно скопировать.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

RGB → LAB

Раз проблема грязных градиентов связана с устройством RGB, то можно воспользоваться альтернативным цветовым пространством LAB. Оно спроектировано с учётом восприятия цветов глазом человека, поэтому градиенты будут не только плавными, но и с понятной логикой перехода цветов.

В Figma градиенты исправляются через плагин Chromatic Figma. Выделите фигуру с градиентом, запустите плагин Chromatic Figma, выберите Fix Gradient и нажмите Apply.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

В качестве альтернативного метода создания градиента в LAB можно воспользоваться инструментом Lch and Lab colour and gradient picker Дэвида Джонстона.

Выберите два цвета, между которыми надо проложить градиент, и введите желаемое количество ступеней. Чем больше ступеней, тем более плавным будет переход.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Затем перенесите цвета из колонки Lab в редактор.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

В Figma для того, чтобы расставить точки градиента на равном расстоянии, можно использовать плагин Precise Gradients. Сначала расставьте точки на случайном расстоянии, сохранив порядок цветов, затем запустите плагин и нажмите на иконку выравнивания, которая расположена в строке Gradient stops справа.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Сетчатые градиенты

Сетчатый градиент — сложный градиент на основе двухмерной сетки, также он называется mesh-градиентом. Создавать такой градиент нужно в специальных редакторах, поскольку добиться чего-то подобного с помощью комбинации простых градиентов, о которых мы говорили выше, невозможно: наложение множества градиентов приведёт к искажению цветов, и результат сложно будет назвать красивым.

В 2020–2021 годах мода на сетчатые градиенты набрала обороты — они действительно выглядят очень эффектно, и поэтому не удивительно, что дизайнеры их любят.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Естественно, как и с обычными градиентами, сетчатые можно выбрать из наборов готовых, например на meshgradients.design или products.ls.graphics. Но с точки зрения уникальности гораздо эффективнее делать mesh-градиенты самостоятельно.

Плагин Mesh Gradient в Figma

Для создания сетчатого градиента в Figma нужно использовать плагин Mesh Gradient. На плоскости устанавливаются опорные точки, которые будут «вершинами» градиента — краска по ним будет «стекать», смешиваясь с краской с других «вершин». На краях плоскости точки установлены по умолчанию.

Рассмотрим интерфейс плагина. В нём можно настроить размер сетки, цвета из углов градиента, отображение элементов управления, а также управление опорными точками mesh-градиента. Для ленивых сделана кнопка Randomize, которая создаёт случайный сетчатый градиент.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Чтобы включить отображение сетки, проходящей через опорные точки, в параметре Control visibility нужно переключиться на режим Lines. Параметры опорной точки: положение, цвет, регулировки сетки.

Цвет градиента по умолчанию задаётся исходя из начального положения опорной точки в сетке и значений цветов на углах — всё это можно менять, что повлечёт изменение градиента.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

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

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

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

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Теперь остаётся только нарисовать красивый градиент, используя положение точек и цвета углов. Можно добавить дополнительные точки. Затем выберите размер в правой части кнопки Generate: размер « 1x» создаёт файл в размере 512×512 px, размер « 5x» — 2560×2560 px. Теперь можно нажать на кнопку Generate.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

В результате плагин создаст красивый сетчатый градиент в формате PNG. А если нажать на кнопку Save перед Generate, то он сохранится в коллекцию.

Веб-сервис Mesh

Принцип работы сервиса Mesh очень сильно отличается от плагина Figma. В нижней части экрана задаются цвета углов, а для создания градиента используются два окна.

В левом окне положение точки влияет на то, с какой силой она будет распространять цвет: чем ближе точка к углу, тем больше её цвета будет на градиенте в правой части. Положение точек в правом окне влияет на взаимодействие цветов друг с другом: чем точки ближе, тем переход более резкий, чем дальше — тем более плавный.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Чтобы добавить точку, нужно кликнуть мышью в произвольном месте, для удаления — нажать на точку, удерживая Shift. Минимальное количество точек — 4, максимальное — 11.

Описать работу сервиса сложнее, чем им пользоваться, поэтому просто переходите в Mesh и создавайте красоту. После создания нажмите Export в правом верхнем углу и сохраните градиент в размере 2000×2000 рх в формате PNG.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Подготовка градиентов к печати

Во-первых, лучше сразу перевести макет в цветовое пространство CMYK, потому что некоторых цветов из модели RGB в модели CMYK нет.

Переключение в режим CMYK в разных редакторах отличается, но мы остановим свой выбор на Adobe Illustrator как одной из самых популярных программ для графического дизайна и допечатной подготовки. Поэтому, открыв файл, выберите меню « Файл», перейдите в пункт « Цветовой режим документа» и кликните по CMYK.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Далее надо позаботится о том, чтобы градиент при печати не стал «ступенчатым». Иногда возникает неприятная ситуация, когда градиент на экране отображается нормально, но при печати вместо плавных переходы получаются резкими.

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

В Adobe Illustrator для растрирования нужно выделить объект с градиентом, затем перейти в меню « Объект» и выбрать « Растрировать…», после чего нажать на ОК.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

В дополнение к растрированию также рекомендуют добавить шум — он смажет градиент и сделает его более равномерным.

В Adobe Illustrator для добавления шума нужно выделить объект, затем перейти в меню « Эффект», выбрать в нем « Текстура» и затем « Зерно». В появившемся окне выставите степень зернистости и нажмите ОК.

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Описанный способ растрирования градиента подходит для любых редакторов, не только для Adobe Illustrator. Но другие программы могут предложить и альтернативные методы. Их надо изучать на официальных ресурсах производителя программы, а также тематических форумах.

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

Как итог

Работа с градиентами требует не только отменного художественного вкуса и знаний колористики, но и серьёзной технической базы.

1. Не ограничивайтесь стандартными инструментами. При работе в Figma используйте плагины:

2. Если вы работаете с другим редактором или не хотите устанавливать плагин, то используйте онлайн-сервисы:

3. Не стоит и пытаться создать сетчатый градиент стандартными средствами. Используйте:

4. Прокачайте знания по теории цвета, в этом вам помогут наши материалы:

Источник

А давайте я вам расскажу про градиенты!

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании
скрин финального результата

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

Зачем?

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

Что должно было получиться

Метод drawGradient() должен работать следующим образом: мы задаем координаты и цвета двух точек, после чего поверх всего изображения рисуется градиент. Примерно так:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

На данном рисунке точка A имеет координаты (55; 20) и цвет 0xff2e2e2e, а точка B — координаты (175; 180) и цвет 0xffb5b5b5. не забываем, что начало координат находится в левом верхнем углу, а ось Y направлена вниз.

Начинаем разбираться

В качестве эталона я взял градиент из фотошопа с прошлого скриншота. Как можно заметить, градиент состоит из трех частей:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании
Красная часть должна быть залита цветом точки А, зеленая — точки B, а цвет каждого пикселя оставшейся зоны должен вычисляться в зависимости от расстояния от него до прямых c и d.

Думаю очевидно, что нам нужен алгоритм, который будет определять расстояние от любого пикселя до прямых c и d. Также нужен способ для определения того, какой пиксель лежит в «красной» области, какой в «зеленой», а какой в оставшейся области.

Вспомним школьный курс геометрии и нарисуем следующую иллюстрацию для случайного пикселя E:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

На данном рисунке AF — расстояние от пикселя E до прямой a. И, соответсвенно, FB — расстояние до прямой b. Именно эти расстояния и будут определять цвет пикселя. И тут же решается и проблема с определением того, к какой области относится пиксель. Тут все очень просто. Если AF + FB > AB, значит пиксель лежит либо в красной, либо в зеленой зоне. Чтобы определить в какой именно, сравним AF и FB. Если AF > FB, значит пиксель лежит в зеленой зоне, иначе в красной. Вот такая математика.

Итак, наша задача найти AF и BF. Сконцентрируемся на AF, по теореме Пифагора выходит, что:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Так, квадрат длины AE мы можем узнать из той же теоремы Пифагора, благо нам известны координаты точек A и E. Получается вот так:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Осталось найти только EF. Это немного потруднее, но ничего страшного. Так как наш отрезок EF представляет собой высоту треугольника, опущенную на сторону AB, нам поможет формула нахождения высоты. Выглядит она так:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

А p — это одна из самых вводящих в заблуждение вещей. Это не периметр, а полупериметр. Помню пару раз совершал в школе фэйлы по этому поводу. Считается так:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

AB и EB подсчитываем точно также как и AE — исходя из координат.

Итак, алгоритм подсчета AF как на ладони:
1. Рассчитываем AE, EB и AB
2. Рассчитываем p
3. Рассчитываем EF
4. Рассчитываем AF

Алгоритм для BF аналогичен, не буду его расписывать.

Самое время покодить!

Я решил создать класс, который представляет обертку для BufferedImage, назовем его EditableImage. И в этом классе, по моим прикидкам, должны были быть следующие методы:

Тут и далее все цвета в моем коде задаются в виде int, который имеет следующий вид:

Идея с классом удобна тем, что если я потом захочу реализовать еще какие-нибудь фишки кроме градиента, это будет легко сделать.

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

Данную программу можно скомпилировать уже на этом этапе, но она покажет нам просто черную картинку. Самое время написать метод для градиента!

У меня получилось вот так:

Обратите внимание что я применяю функцию модуля — Math.abs() везде, где есть хоть малейшая вероятность того, что в функцию нахождения квадратного корня — Math.sqrt() может попасть отрицательное число. В противном случае у нас появятся артефакты.

Осталось только разобраться с методом interpolate и дело в шляпе. Он должен принимать начальный цвет, конечный цвет и число progress, которое может быть от 0 до 1 и которое определяет долю каждого цвета. Например если progress = 0, возвращается начальный цвет, если progress = 1 — конечный цвет, а если progress = 0.5 — средний цвет между начальным и конечным. Задача ясна, метод написан:

Давайте глянем на результат!

Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Уже неплохо, но наш использует линейную интерполяцию, а в фотошопе в ходу определенно какая-то другая.

Про интерполяции

Посмотрите внимательно на картинку. Левый градиент нарисован нашим алгоритмом, правый — фотошопом. На каждой строке стоит красная точка. И чем темнее строка, тем точка левее:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании
Как видно, линия у нас прямая, как рельса. Надо это исправлять. Вот тут я так ничего дельного не придумал и решил подсмотреть в интернете. Нашел статью на хабре, в которой описаны некоторые виды интерполяции и даже код есть: habrahabr.ru/post/142592

Ну что, реализуем косинусную интерполяция! Во первых добавим в класс EditableImage две константы:

Во вторых перепишем немного метод interpolate, чтобы ему на вход подавалась одна из этих констант:

Затем в список параметров метода drawGradient добавим int interpolation и в строчку вызова метода interpolate добавим эту переменную:

И в завершение в классе GradientPanel перепишем вызов метода drawGradient, добавив в него INTERPOLATION_COS

Вот что получилось с этим методом интерполяции:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании
Хм, выглядит неплохо, но в фотошопе линия явно не такая кривая. Что же делать? То слишком прямая, то слишком кривая… А что если сделать среднее из этих двух крайностей?

Отличная идея, добавляем константу INTERPOLATION_COS_LINEAR = 2

А в код метода interpolate добавляем еще один else if:

И о чудо, получилась практически полная копия градиента из фотошопа!
Сами поглядите:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании
Наша слева.

А вот вам две картинки с верхнего скриншота, совмещенные в одну. Видно, что интерполяция практически одинаковая, отличия можно свалить на погрешности при округлениях:
Градиент что это такое в рисовании. Смотреть фото Градиент что это такое в рисовании. Смотреть картинку Градиент что это такое в рисовании. Картинка про Градиент что это такое в рисовании. Фото Градиент что это такое в рисовании

Ура, мы сделали градиент как в фотошопе, хоть и гораздо более медленный.
Исходники и jar

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

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

Источник

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

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