Skip to content

Latest commit

 

History

History
95 lines (59 loc) · 10.7 KB

images-processing.md

File metadata and controls

95 lines (59 loc) · 10.7 KB

Images

Всю работу с изображениями в TARS можно разбить на две части: «Спрайты» и «Отдельные изображения».

Спрайты

TARS поддерживает работу с двумя форматами избражений для спрайта: PNG и SVG. Общий подход отлично описан в презентации веб-разработчика Тимофея Чаптыкова. Кратко подход описан ниже. Преимущество данного подходо раскрыто в презентации и не будет объяснено ниже.

Здесь не будeт описаны преимущества склейки интерфейсных (и других мелких или частоповторяющихся изображений) в единый спрайт. Если вы не знакомы с понятием спрайт — подробности по ссылке.

Вы можете пропустить теорию и сразу перейти к описанию работы со спрайтами.

В настоящий момент существует большое число экранов с различной плотностью пикселей. Например смартфоны с экранами с диагональю 5' и разрешением экрана 1920x1080. При этом есть экраны с диагональю 23', которые имеют такое же разрешение. Каждый пиксель такого экрана (с большой диагональю) отображает каждый отдельный пиксель картинки. Экраны смартфонов (с характеристиками 5' и 1920x1080) отображают изображения иным образом: 1 пиксель картинки размывается на 3 пикселя экрана смартфона. Количество пикселей, на которое размываеся изображение обозначается как dppx. Более подробно можно прочесть здесь и здесь. Предположим у нас есть спрайт PNG-изображений. Такие картинки имеют фиксированные размеры. Если мы будем размазывать такую картинку на количество пикселей в 3 раза большее, чем размеры картинки, то изображение будет размыто.

Чтобы избавиться от этой проблемы, можно использовать изображение в 3 раза большего размера для подобного экрана, при этом размер картинки в css задавать исходя из размера оригинального изображения (свойство background-size).

На данный момент существуют экраны с dppx от 1 до 4 (скоро будут и выше). Готовить спрайты для 4 размеров экранов — это очень много работы.

Выручает SVG. Векторный, не зависит от dppx экрана, отлично рендерится в современных (и не только) браузерах. Можно сделать только 1 размер и это изображение будет выглядеть одинаково на всех экранах.

К сожалению SVG имеет несколько недостатков:

  • SVG плохо отображает радиальные и другие сложные градиенты (линейные отображются отлично).
  • Плохо отображаются сложные тени.
  • Не отображается в IE8.

Итого имеем два подхода: SVG для всего, чего можем. Для остального готовим PNG-изображения для тех экранов, которые вы собираетесь поддерживать. Для IE8 будем просто растрировать SVG-изображения.

Подключение спрайтов

SVG изображения не склеиваются в спрайт, а включаются прямо в css в dev-режиме и кодируются в base64 при сборке. Такой css хорошо поддается сжатию в gzip, кешируется брауезром. SVG-изображения в release-версии минифицируются. Изображения, которые должны быть включены таким образом необходимо складывать в папку (указан путь по умолчанию): 'static/img/svg/'. Вложенность директорий НЕ поддерживается.

Для изображений, которые не могут быть отрисованы в SVG складываются в 'static/img/sprite/96dpi|192dpi|288dpi|384dpi'. В папку 96dpi кладутся изображения для экранов с dppx = 1, в папку 192dpi кладутся изображения в два раза больше оригинала, с названиями оригиналов. Данные изображения будут подключаться на экранах с dppx = 2. Далее по аналогии.

Используемые экраны и подключение работы с SVG настраивается в конфиге проекта.

Подключение изображений в css-коде производится с помощью двух миксинов (пример на scss, названия миксинов и входные параметры для других css-препроцессоров такие же):

@include bg($png-image-name);         // Подключение спрайта с png-картинками
@include bg-svg($svg-image-name);     // Подключение svg-изображения

png-image-name или svg-image-name — название соответсвующей картинки без расширения.

!Очень важно, чтобы при сохранении SVG-картинки в ней присутсвовал атрибут viewBox! Сохраняйте SVG как объект, который может быть вставлен в html без изменений (в Adobe Illustrator опция Image location – Embed).

Миксин bg включит в css background, размер картинки, backgroud-size и задаст позиционирование внутри png-спрайта. Больше ничего добавлять не нужно, миксин сам задаст медиа-выражения для экранов с различной плотностью пикселей. Миксин bg-svg включит в css подключит svg-спрайт в качестве фона, задаст все необходимые смещения и размеры.

Отдельные изображения

Работа с отдельными изображениями очень проста. Отдельные изображения разделены на несколько категорий. В зависимости от категории картинки кладутся в разные места.

Сборщик поддерживает изображения любого типа, но только SVG, PNG, JPG и GIF будут подвергаться минификации.

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

Картинки модуля

Находятся в папке assets внутри модуля. Для подключения используется следующий шаблон (для подключения картинки в html, необходимо использовать плейсхолдер %=staticPrefix=%):

.moduleName {
    background: url('%=staticPrefixForCss=%assets/moduleName/sample-image-name.png') no-repeat;
}

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

Картинки для контента

Находятся по пути (указан путь по умолчанию): 'static/img/content/'. В данную папку стоит класть картинки которые встречаются в контентных областях на сайте, например, на странице новости. Вложенность директорий поддерживается.

Подключение картинки внутри html:

<div class="news__item">
    <img src="%=staticPrefix=%img/content/sample-image-name.jpg" alt="">
</div>
Картинки для плагинов

Находятся по пути (указан путь по умолчанию): 'static/img/plugins/'. В данную папку стоит класть картинки которые используются в различных плагинах. Вложенность директорий поддерживается.

Общие картинки

Находятся по пути (указан путь по умолчанию): 'static/img/general/'. В данную папку стоит класть картинки которые используются по всему проекту, например общий фон сайта. Вложенность директорий поддерживается.