<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JSToolbox - все о JavaScript &#187; Canvas</title>
	<atom:link href="http://www.jstoolbox.com/category/canvas/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jstoolbox.com</link>
	<description>Блог о программировании вообще и о JavaScript в частности, уроки, статьи, заметки, база знаний.</description>
	<lastBuildDate>Wed, 28 Jul 2010 22:33:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Обесцвечивание элементов веб страниц</title>
		<link>http://www.jstoolbox.com/2009/05/29/obescvechivanie-elementov/</link>
		<comments>http://www.jstoolbox.com/2009/05/29/obescvechivanie-elementov/#comments</comments>
		<pubDate>Fri, 29 May 2009 20:59:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Эффекты]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[обесцвечивание]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/?p=456</guid>
		<description><![CDATA[<p>Недавно нашел <a href="http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/" title="Grayscaling in non-IE browsers">интересный метод</a> обесцветить, т.е. сделать черно-белым любой элемент на веб странице, будь то изображение изображение, таблица, форма или что-либо еще.</p>
<p>Казалось бы, зачем это может понадобиться? Однако у меня сразу же появилась мысль о том, где такая возможность пригодиться. Довольно часто в моей практике встречались дизайны, в которых существовали элементы управления (различные кнопки, иконки) в двух видах - цветной, обозначающий что элемент активен, и серый, обозначающий что элемент не активен и нажимать на него не имеет смысла. Раньше я использовал два разных изображения - одно цветное, одно черно-белое, и если элемент деактивировался, то я подставлял нецветную картинку. Недостаток такого метода в том, что браузер должен подгружать дополнительную картинку, и представьте себе, что этих картинок может быть довольно много... Кроме того, нужно тратить время на то, чтобы создавать все эти нецветные изображения. При помощи предлагаемого здесь метода, обесцвечивание можно выполнить простой функцией <strong>grayscale()</strong>.</p>]]></description>
			<content:encoded><![CDATA[<p>Недавно нашел <a href="http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/" title="Grayscaling in non-IE browsers">интересный метод</a> обесцветить, т.е. сделать черно-белым любой элемент на веб странице, будь то изображение, таблица, форма или что-либо еще.</p>
<p>Казалось бы, зачем это может понадобиться? Однако у меня сразу же появилась мысль о том, где такая возможность пригодиться. Довольно часто в моей практике встречались дизайны, в которых существовали элементы управления (различные кнопки, иконки) в двух видах &#8211; цветной, обозначающий что элемент активен, и серый, обозначающий что элемент не активен и нажимать на него не имеет смысла. Раньше я использовал два разных изображения &#8211; одно цветное, одно черно-белое, и если элемент деактивировался, то я подставлял нецветную картинку. Недостаток такого метода в том, что браузер должен подгружать дополнительную картинку, и хуже всего, что этих картинок может быть довольно много&#8230; Кроме того, нужно тратить время на то, чтобы создавать все эти нецветные изображения. При помощи предлагаемого здесь метода, обесцвечивание можно выполнить простой функцией <strong>grayscale()</strong>.</p>
<p>Чтобы вам была более понятна суть, посмотрите мой <a href="/demo/grayscale.php" title="Демо пример обесцвечивания элементов DOM">демо пример</a>. Однако здесь же замечу, что, хотя этот метод и тестировался в разных браузерах, все же пока это экспериментальное решение.</p>
<p><span id="more-456"></span></p>
<p>Теперь вкратце опишу принцип работы этого метода.</p>
<p>Хоть я частенько и ругаю IE за его огрехи, но в этом случае он справляется лучше всех, ибо в Internet Explorer существует специальный фильтр который позволяет сделать такое преобразование цвета:</p>
<pre class="prettyprint">
elem.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)';
</pre>
<p>Фильтр может быть установлени и в CSS:</p>
<pre class="prettyprint">
elem {
    filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
    /* Элемент должен иметь "hasLayout"! */
    zoom: 1;
}
</pre>
<p>Что касается остальных браузеров, то здесь все гораздо сложнее. Во первых обесцвечивание обычных элементов &#8211; параграфов, таблиц и т.п. В этом случае нужно просматривать значения &#8220;цветных&#8221; стилей: color, background-color, и изменять их цвет следующими фукнциями:</p>
<pre class="prettyprint">
// Уменьшение насыщенности
function RGBtoDesat(r,g,b) {
    var average = (r + g + b) / 3;
    return {
        r: average,
        g: average,
        b: average
    };
}

// Преобразование в черно-белый цвет
function RGBtoGrayscale(r,g,b) {
    var mono = parseInt( (0.2125 * r) + (0.7154 * g) + (0.0721 * b), 10 );
    return {
        r: mono,
        g: mono,
        b: mono
    };
}
</pre>
<p>Для обесцвечивания изображений используется другая технология &#8211; элемент <strong>&lt;canvas&gt;</strong> и его метод <strong>getImageData()</strong>, но при этом изображение должно находиться на том же домене, что и веб страница. По всей видимости метод <strong>getImageData()</strong> не поддерживается в <em>Chrome</em> и <em>Safari</em> меньше четвертой версии, поэтому для этих браузеров такой метод работать не будет.</p>
<h3>Использование</h3>
<p>Чтобы выполнить обесцвечивание, нужно вызвать функцию <strong>grayscale()</strong>, передав в качестве параметра элемент или коллекцию элементов:</p>
<pre class="prettyprint">
// один элемент
var el = document.getElementById( 'myEl' );
grayscale( el );

// Массив элементов DOM
grayscale( document.getElementsByTagName('div') );

// Также работает с коллекциями jQuery
grayscale( $('div') );
</pre>
<p>Чтобы вернуть элемент в первоначальное, цветное, состояние, нужно воспользоваться функцией <strong>grayscale.reset()</strong>:</p>
<pre class="prettyprint">
grayscale.reset( el );
grayscale.reset( $('div') );
</pre>
<p>При всем этом, я бы не советовал вам использовать такую методику для больших изображений, так как их использование в элементе <strong>canvas</strong> может поглотить много ресурсов, даже если вы используете предлагаемую автором фунцкию <strong>grayscale.prepare()</strong> работы с такими изображениями.</p>
<p>Больше информации можете узнать на <a href="http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/" title="Grayscaling in non-IE browsers">здесь</a>. Там же можно <a href="http://james.padolsey.com/demos/grayscale/">скачать скрипт и посмотреть демо пример автора</a>.</p>
<p><a href="/demo/grayscale.php" class="demo" title="Демо пример">Смотреть демо</a></p>
<div class="postLinks"><strong>Спонсор статьи:</strong><br/><a href="http://www.domania.ru/">http://www.domania.ru/</a> &#8211; продажа квартир в Москве<br/><a href="http://www.automania.ru/">http://www.automania.ru/</a> &#8211; подержанные автомобили<br/><a href="http://www.job.ru/">http://www.job.ru/</a> &#8211; работа в москве</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2009/05/29/obescvechivanie-elementov/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Как использовать Canvas в Internet Explorer</title>
		<link>http://www.jstoolbox.com/2008/05/16/kak-ispolzovat-canvas-v-internet-explorer/</link>
		<comments>http://www.jstoolbox.com/2008/05/16/kak-ispolzovat-canvas-v-internet-explorer/#comments</comments>
		<pubDate>Fri, 16 May 2008 20:49:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Canvas]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[VML]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/05/16/kak-ispolzovat-canvas-v-internet-explorer/</guid>
		<description><![CDATA[Тег canvas постепенно набирает популярность, поскольку позволяет создавать 2-х мерную графику при помощи JavaScript. Однако отсутствие поддержки со стороны Internet Explorer значительно тормозит дальнейшее его продвижение. Сегодня я нашел скрипт ExplorerCanvas, который добавляет поддержку этого тега в IE используя возможности Vector Markup Language (VML). Конечно же не все возможности canvas реализованы (например радиальный градиент), но [...]]]></description>
			<content:encoded><![CDATA[<p>Тег <strong>canvas</strong> постепенно набирает популярность, поскольку позволяет создавать 2-х мерную графику при помощи JavaScript. Однако отсутствие поддержки со стороны Internet Explorer значительно тормозит дальнейшее его продвижение. Сегодня я нашел скрипт <a href="http://sourceforge.net/projects/excanvas/">ExplorerCanvas</a>, который добавляет поддержку этого тега в IE используя возможности <a href="http://msdn.microsoft.com/en-us/library/bb250524.aspx">Vector Markup Language</a> (VML). Конечно же не все возможности <strong>canvas</strong> реализованы (например радиальный градиент), но будем надеяться в будущем они появятся. Также трудно сказать о производительности этого чуда, по всей видимости она уступает <strong>canvas</strong>.</p>
<p>Подключать скрипт нужно только для IE используя условное подключение:</p>
<pre class="prettyprint">
&lt;!--[if IE]>&lt;script type="text/javascript" src="excanvas.js">&lt;/script>&lt;![endif]-->
</pre>
<p>Чтобы продемонстрировать его в работе, я выложил один из демо примеров, доступных в дистрибутиве: <a href="/demo/excanvas/demo.html">смотреть демо</a></p>
<p><a href="http://sourceforge.net/project/showfiles.php?group_id=163391" class="download">Загрузить</a><br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/05/16/kak-ispolzovat-canvas-v-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
