Применение фильтров изображения к данным изображения холста или в JavaScript - PullRequest
8 голосов
/ 10 января 2011

Я разработчик Flash и работаю над портом игры в JavaScript.В Flash-версии я использую фильтры свечения, размытия и цветовой матрицы для управления внешним видом экранных объектов.Я хотел бы сделать то же самое с моим представлением JavaScript.Некоторые из них являются украшениями, в то время как другие используются для тщательного получения желаемого результата.Поскольку цели этого проекта состоят в том, чтобы создать точный порт, мне интересно, какие варианты у меня есть, чтобы применить фильтры к необработанным данным холста, встроенным SVG-тэгам или прямым DOM-элементам.но мой сотрудник на данный момент настаивает на лицензии GPL, что означает, что любая технология, которую я использую, должна быть совместима с GPL.Pixastic использует публичную лицензию Mozilla, поэтому я не могу ее использовать.(Что является большим обломом, позвольте мне сказать вам.)

Скажу еще раз кратко: как эффективно применять пиксельные фильтры к элементам DOM, к данным изображения холста или к тегам SVG с JavaScript?1005 *

Ответы [ 4 ]

5 голосов
/ 10 января 2011

Вот пример, показывающий некоторую фильтрацию SVG:

и соответствующая версия холста:

Вот некоторые библиотеки js для canvas, выполняющие то, что, я думаю, вы ищете:

Несколько примеров фильтров svg можно найти на http://svg -wow.org (CC0 лицензирован).

3 голосов
/ 10 января 2011

Я создал библиотеку ( context-blender ) для выполнения эффектов смешивания в стиле Photoshop между HTML-холстами. Это не совсем то, что вам нужно, так как вы хотите, чтобы некоторые фильтры свертки работали с пикселями, отличными от оригинала, но путь к коду будет таким же: getImageData(), munge данных, putImageData.

Моя библиотека имеет лицензию MIT, так что не стесняйтесь исследовать ее, не боясь проблем.

1 голос
/ 04 января 2018

Лучший способ фильтровать изображения в Javascript - это среда обработки изображений. Некоторые чистые опции Javascript:

В случае MarvinJ , используйте следующий код для загрузки вашего изображения:

var image = new MarvinImage();
image.load("https://i.imgur.com/By6tvip.jpg", imageLoaded);

Я буду использовать следующее входное изображение для демонстрации некоторых фильтров:

enter image description here

GrayScale:

 Marvin.grayScale(image, imageOut);

enter image description here

Черно-белый:

Marvin.blackAndWhite(image, imageOut, 10);

enter image description here

Sepia:

Marvin.sepia(image, imageOut, 40);

enter image description here

Тиснение:

Marvin.emboss(image, imageOut);

enter image description here

Обнаружение края:

Marvin.prewitt(image, imageOut);

enter image description here

Размытие

Marvin.gaussianBlur(image, imageOut, 3);

enter image description here

Яркость и контрастность:

Marvin.brightnessAndContrast(image, imageOut, 70, 60);

enter image description here

Цветовой канал:

Marvin.colorChannel(image, imageOut, 0, 0, 110);

enter image description here

Пример запуска предыдущих фильтров:

var canvas1 = document.getElementById("canvas1");
var image = new MarvinImage();
image.load("https://i.imgur.com/By6tvip.jpg", imageLoaded);

function imageLoaded(){
	var imageOut = new MarvinImage(image.getWidth(), image.getHeight());
  
	// GrayScale
	Marvin.grayScale(image, imageOut);
	imageOut.draw(canvas1);
	
	// Black and White
	Marvin.blackAndWhite(image, imageOut, 10);
	imageOut.draw(canvas2);
	
	// Sepia
	Marvin.sepia(image, imageOut, 40);
	imageOut.draw(canvas3);
	
	// Emboss
	Marvin.emboss(image, imageOut);
	imageOut.draw(canvas4);
  
	// Edge
	imageOut.clear(0xFF000000);
	Marvin.prewitt(image, imageOut);
	imageOut.draw(canvas5);
  
	// Gaussian Blur
	Marvin.gaussianBlur(image, imageOut, 5);
	imageOut.draw(canvas6);
  
	// Brightness
	Marvin.brightnessAndContrast(image, imageOut, 70, 60);
	imageOut.draw(canvas7);
  
	// Color Channel
	Marvin.colorChannel(image, imageOut, 0, 0, 110);
	imageOut.draw(canvas8);
}
<script src="https://www.marvinj.org/releases/marvinj-0.7.js"></script>
<canvas id="canvas1" width="192" height="120"></canvas>
<canvas id="canvas2" width="192" height="120"></canvas>
<canvas id="canvas3" width="192" height="120"></canvas>
<canvas id="canvas4" width="192" height="120"></canvas>
<canvas id="canvas5" width="192" height="120"></canvas>
<canvas id="canvas6" width="192" height="120"></canvas>
<canvas id="canvas7" width="192" height="120"></canvas>
<canvas id="canvas8" width="192" height="120"></canvas>
1 голос
/ 08 сентября 2013

Библиотека Filter.js для обработки изображений (включая многие типы фильтров AS3, такие как свертка, цветовая матрица, карта смещения и т. Д.)

https://github.com/foo123/FILTER.js

PS Я автор

...