Определить, является ли изображение оттенками серого или цветным, используя JavaScript?

Можно ли с помощью JavaScript определить, является ли данное изображение оттенками серого или цветным?


person devnull    schedule 30.11.2011    source источник
comment
Используйте элемент холста, пропустите все пиксели и проверьте R = G = B.   -  person Gerben    schedule 30.11.2011
comment
вот некоторый код для анализа цветов изображения в jscript, может помочь вам в дальнейшем !   -  person Leon    schedule 30.11.2011
comment
@Leon - jscript и javascript предназначены для разных языков, хотя ваша ссылка является ответом javascript.   -  person Ash Burlaczenko    schedule 30.11.2011
comment
@AshBurlaczenko - извините, но JS, JavaScript, JScript используются, чтобы говорить о языке программирования JAVASCRIPT. Если вы имеете в виду JScript.NET, это действительно другое ;-)   -  person Leon    schedule 30.11.2011
comment
@Leon - JScript был разработан mircosoft, а JavaScript изначально - Netscape. javascript.about.com/od/reference/a/jscript.htm   -  person Ash Burlaczenko    schedule 30.11.2011


Ответы (2)


Взгляните на http://www.pixastic.com/lib/docs/actions/colorhistogram/

Это легко предоставит вам данные, необходимые для определения этого.

person tkone    schedule 30.11.2011
comment
Идеально! Я обнаружил, что если изображение в оттенках серого, возвращаемые значения RGB такие же. Например, изображение в градациях серого вернет что-то вроде (9445,534,501,508,442,448 ...) для rval, (9445,534,501,508,442,448 ...) для gval и (9445,534,501,508,442,448 ...) для bval. С другой стороны, цветное изображение вернет (1,3,5,3,8 ...), (1,2,3,0,3 ...) и (1,2,3,0,3 ...) соответственно. Большое спасибо за вашу помощь! - person devnull; 01.12.2011
comment
Вот дешевое решение, использующее эту библиотеку: (Я отказываюсь от попыток форматирования. Я чертов нуб. Стреляйте в меня. Кто-нибудь исправит это. Извините за мое незнание.) Function isGrayscale (img) {var histret = {} ; Pixastic.process (document.getElementById (img), colorhistogram, {paint: true, returnValue: histret}); возврат ((histret.rvals.toString () == histret.gval.toString ()) && (histret.gval.toString () == histret.bvals.toString ())); } - person devnull; 01.12.2011

  1. нарисовать изображение на холсте

  2. перебрать данные изображения

  3. проверить для каждого пикселя, если красный-канал == зеленый-канал == синий-канал (все цветовые каналы имеют одинаковое значение)

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

person zuloo    schedule 30.11.2011
comment
да, только в HTML5 (или браузерах, поддерживающих объект холста), но будет ли разумно знать, является ли изображение оттенками серого, если вы ничего не можете сделать с изображением? если вы хотите отобразить только метаинформацию об используемом цветовом пространстве на веб-сайте, вы можете использовать какую-нибудь серверную программу, например imagemagick, или какой-нибудь Java-материал для определения цветового пространства. - person zuloo; 01.12.2011