Можно ли с помощью JavaScript определить, является ли данное изображение оттенками серого или цветным?
Определить, является ли изображение оттенками серого или цветным, используя JavaScript?
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
Идеально! Я обнаружил, что если изображение в оттенках серого, возвращаемые значения 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
Вот дешевое решение, использующее эту библиотеку: (Я отказываюсь от попыток форматирования. Я чертов нуб. Стреляйте в меня. Кто-нибудь исправит это. Извините за мое незнание.) 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
нарисовать изображение на холсте
перебрать данные изображения
проверить для каждого пикселя, если красный-канал == зеленый-канал == синий-канал (все цветовые каналы имеют одинаковое значение)
если true для всех пикселей, это оттенки серого, если вы нажмете первый пиксель, который не соответствует условию, вы можете остановиться, и это будет цвет.
person
zuloo
schedule
30.11.2011
да, только в HTML5 (или браузерах, поддерживающих объект холста), но будет ли разумно знать, является ли изображение оттенками серого, если вы ничего не можете сделать с изображением? если вы хотите отобразить только метаинформацию об используемом цветовом пространстве на веб-сайте, вы можете использовать какую-нибудь серверную программу, например imagemagick, или какой-нибудь Java-материал для определения цветового пространства.
- person zuloo; 01.12.2011