Статьи

Создайте простой редактор изображений с CSS-фильтрами и jQuery

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

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

Если вы хотите копнуть глубже, не стесняйтесь проверить Фильтры в MDN или Понимание CSS Filter Effects , в HTML5 Rocks, оба из которых более подробно охватывают общую тему фильтров.

Синтаксис CSS-фильтра

Чтобы написать эффект фильтра в вашем CSS, просто используйте filter: и имя фильтра (например, grayscale , blur и т. Д.).

 .example { filter: <filter-function> [<filter-function>]; } 

Вот как бы вы применили 90% -й фильтр grayscale к элементу:

 .example { filter: grayscale(90%); } 

А в случае браузеров webkit вам понадобится префикс:

 .example { -webkit-filter: grayscale(90%); } 

Значение свойства фильтра обычно находится между 0 и 1, но есть несколько исключений. Например, свойство blur использует пиксельные единицы и может быть любым целым числом. Кроме того, значение фильтра hue-rotate является целым числом с единицей измерения ‘deg’.

 .example { filter: blur(10px); } .example-2 { filter: hue-rotate(90deg); } 

Объединение нескольких фильтров

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

 .example { filter: grayscale(0.5) blur(10px); } 

Сборка редактора изображений

Наш редактор изображений будет состоять из двух частей:

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

Поле URL и контейнер изображений

Мы будем использовать два элемента формы для запроса URL-адреса изображения: ввод текста и кнопку. Затем мы загрузим изображение, присутствующее в URL, в наш div imageContainer .

Вот HTML-код:

 <!-- Form for collecting image URL --> <form id="urlBox" class="center"> <input class="url-box" type="url" id="imgUrl"> <input id="go" type="button" value="Go"> </form> <!-- container where image will be loaded--> <div id="imageContainer" class="center"> <img src="/default.png" alt=""> </div> 

А вот и JQuery:

 // adding an image via url box function addImage(e) { var imgUrl = $('#imgUrl').val(); if (imgUrl.length) { $('#imageContainer img').attr('src', imgUrl); } e.preventDefault(); } // on click of go(submit) button, addImage() will be called $('#go').click(addImage); // on pressing return(enter), addImage() will be called $('#urlBox').submit(addImage); 

управления

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

Чтобы получить значения для разных фильтров, мы будем использовать селекторы диапазона. Это позволит нам увидеть эффект наших изменений мгновенно. Вот код для добавления двух селекторов диапазонов — один для grayscale а другой для blur (для простоты здесь есть только два примера, но исходный код имеет 9 вариантов):

Это HTML:

 <!--Controls for CSS filters via range input--> <form id="imageEditor"> <p> <label for="gs">Grayscale</label> <input id="gs" name="gs" type="range" min="0" max="100" value="0"> </p> <p> <label for="blur">Blur</label> <input id="blur" name="blur" type="range" min="0" max="10" value="0"> </p> </form> 

Чтобы применить эффекты изменений к фильтрам CSS при изменении значения ползунка, вот jQuery:

 // Editing image via css properties function editImage() { var gs = $('#gs').val(); // grayscale var blur = $('#blur').val(); // blur $('#imageContainer img').css('-webkit-filter', 'grayscale(' + gs + '%) blur(' + blur + 'px'); } // When sliders change, image will be // updated via the editImage() function $('input[type=range]').change(editImage).mousemove(editImage); 

Всякий раз, когда ползунок настраивается, editImage() функция editImage() . editImage() сначала сохраняет значение ползунка в соответствующих переменных ( gs и blur ), а затем применяет их к изображению.

Здесь важно помнить о единицах применяемого filter . Как видно из приведенного выше кода, это «%» для фильтра grayscale() и «px» для фильтра blur() .

Теперь вы можете использовать приведенный выше код, чтобы добавить все фильтры и иметь свой собственный крошечный редактор изображений.

Демо и полный код

Вы можете просмотреть окончательный редактор изображений со всеми 9 действующими фильтрами здесь . Или загрузите полный код демо на GitHub .

Редактор изображений с CSS-фильтрами

Теперь, когда вы знакомы со всей мощью CSS, которая позволяет вам манипулировать изображением, вам обязательно следует попробовать свойство filter в следующем проекте. Если вам интересно, вы можете попробовать добавить следующие функции в текущее приложение и сделать его более полезным:

  • Возможность загрузить изображение с рабочего стола.
  • Возможность скачать измененное изображение.

Не стесняйтесь, чтобы раскошелиться и отправить запрос тянуть . Рад сотрудничать!