Пример:

Выбрать другую фотографию для примера:








Для смены фотографий с фильтром и без, используется слайдер "До" и "После"
HTML:
1 |
<canvas id="image-filter-canvas"></canvas> |
CSS:
1 2 3 |
#image-filter-canvas { width: 640px; /* Ширина канваса и соотв. фотографии */ } |
JS:
Для реализации этого эффекта используется фильтр WebGLImageFilter. Скачать можно с github или тут
Подключаем его и приведенный ниже код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
(function(){ var canvas = document.getElementById('image-filter-canvas'); var ctx = canvas.getContext('2d'); try { var filter = new WebGLImageFilter(); } catch( err ) { ctx.fillStyle = '#FFF'; ctx.fillRect(0,0, canvas.width, canvas.height); ctx.fillStyle = '#000'; ctx.fillText("Браузер не поддерживает WebGL", canvas.width/2, canvas.height/4); return; } var img = new Image(); img.crossOrigin = "Anonymous"; img.src = 'photo.jpg' // Фотография img.onload = function() { canvas.width = img.width; canvas.height = img.height; filter.reset(); filter.addFilter("desaturateLuminance"); filter.addFilter("blur", [2]); filter.addFilter("emboss", [0.99]); filter.addFilter("brightness", [0.9]); filter.addFilter("sepia", {}); filter.addFilter("sharpen"); var filteredImage = filter.apply(img); ctx.drawImage(filteredImage,0,0); }; })(); |
Фильтры:
Основные фильтры:
colorMatrix( matrix )
- применение цветовой матрицы 5x5 (Array[20]
), аналогичную Flash's ColorMatrixFilterconvolution( matrix )
- применение матрицы свертки 3x3 (Array[9]
)blur( size )
- размытие пикселях
Пресеты с использованием основных фильтров:
brightness( amount )
- изменение яркости.1
увеличивает в 2 раза,-1
уменьшает в 2 разаsaturation( amount )
- изменение насыщения.1
увеличивает в 2 раза,-1
уменьшает в 2 разаcontrast( amount )
- изменение контраста.1
увеличивает в 2 раза,-1
уменьшает в 2 разаnegative()
- инвертирование цветаhue( rotation )
- изменение оттенка в градусах0-360
desaturate()
- обесцвечивание изображения одинаково по всем каналамdesaturateLuminance()
- обесцвечивание изображения принимая естественноеluminace
каждого каналаsepia()
- цвета сепииbrownie()
- старинные цветаvintagePinhole()
- старинные цветаkodachrome()
- старинные цветаtechnicolor()
- старинные цветаdetectEdges()
- обнаружение краевsobelX()
- обнаружение краев с помощью горизонтального оператора СобеляsobelY()
- обнаружение краев с помощью вертикального оператора Собеляsharpen( amount )
sharpenemboss( size )
- эффект тиснения с размером в пикселяхpolaroid()
- эффект поларойдной камерыshiftToBGR()
- переключение цветов с RGB на BGR
А зачем нужны эти фильтры, когда проще в фотошопе все сделать и не грузить сайт лишними скриптами, плюс еще это память процессора жрет
А если поглядеть с другой стороны?
Зачем мне фотошоп, когда можно настроить фильтр под стиль сайта, прогонять фотки через него, сохранять и грузить на сайт уже фильтрованные.