<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Retour à La Source • Tag: Canvas • RSS</title>
		<link>http://www.ab-d.fr/tag/Canvas/</link>
		<description>Retour à La Source • Tag: Canvas • RSS</description>
		<copyright>http://www.ab-d.fr/tag/Canvas/ (c) 2010</copyright>
		<language>fr</language>
		<pubDate>Sat, 31 Jul 2010 15:01:25 +0100</pubDate>
		<generator>Retour à La Source • Tag: Canvas • RSS • version 1.0</generator>
		<webMaster>noreply@ab-d.fr ( Benoit Asselin )</webMaster>
		<image>
			<url>http://www.ab-d.fr/images/rss.gif</url>
			<title>Retour à La Source • Tag: Canvas • RSS</title>
			<link>http://www.ab-d.fr/tag/Canvas/</link>
			<width>90</width>
			<height>30</height>
		</image>

		<item>
			<title>Effectuer une rotation d'image en CSS ( rotate balise canvas HTML5 )</title>
			<link>http://www.ab-d.fr/date/2008-05-18/</link>
			<pubDate>Sun, 18 May 2008 17:18:19 +0100</pubDate>
			<author>noreply@ab-d.fr ( Benoit Asselin )</author>
			<category><![CDATA[CSS]]></category>
			<category><![CDATA[Javascript]]></category>
			<category><![CDATA[Canvas]]></category>
			<category><![CDATA[HTML5]]></category>
			<description><![CDATA[<p>
A l'heure où j'écris ces quelques lignes, il n'existe pas réellement de vraie solution pour effectuer une rotation sur une image (ou sur un élément) en CSS.
</p>
<p>
Sous Microsoft Internet Explorer, on peut effectuer une telle opération avec <code>filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);</code>. Toutefois, ceci ne permet pas d'effectuer une rotation au degré prêt.
</p>

<p>
Sous Apple Safari (Webkit), l'équipe de développement a proposé l'écriture suivante <code>-webkit-transform: rotate(90deg);</code>. Cette solution présente un très grand avantage, elle peut être appliquée sur tout type de balises et non simplement sur une image, mais cette propriété reste propre à Safari version 3.x...
</p>

<p>
Dans cette histoire, il reste toujours un navigateur sans réelle solution, notre cher Mozilla Firefox... on aurait pu espérer une commande du type <code>-moz-rotate: 90;</code>, mais il n'en est rien.
</p>

<p>
<br />
Voici donc la solution, utiliser la balise <code>&lt;canvas&gt;&lt;/canvas&gt;</code>.
</p>
<p>
La balise <code>&lt;canvas&gt;</code> est une extension non standard à la norme HTML qui permet d'effectuer des rendus dynamiques d'images bitmap via des scripts.<br />
Cette balise est supportée par les derniers navigateurs Mozilla Firefox, Apple Safari, et Opera Browser. A noter que Microsoft Internet Explorer ne supporte pas nativement la balise <code>&lt;canvas&gt;</code>, pour ce faire, vous devez utiliser une sous couche excanvas <em>( disponible sur http://excanvas.sourceforge.net )</em>
</p>


<p><br />
Exemple de script de rotation d'image compatible avec la plupart des navigateurs récents :</p>

<pre>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"&gt;
&lt;head&gt;
	&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
	&lt;title&gt;rotate()&lt;/title&gt;
	
	&lt;style type="text/css" media="screen"&gt;
	img, canvas { border: 1px solid black; }
	&lt;/style&gt;


&lt;script type="text/javascript"&gt;

function rotate(p_deg) {
	if(document.getElementById('canvas')) {
		/*
		Ok!: Firefox 2, Safari 3, Opera 9.5b2
		Non: Opera 9.27
		*/
		var image = document.getElementById('image');
		var canvas = document.getElementById('canvas');
		var canvasContext = canvas.getContext('2d');
		
		switch(p_deg) {
			default :
			case 0 :
				canvas.setAttribute('width', image.width);
				canvas.setAttribute('height', image.height);
				canvasContext.rotate(p_deg * Math.PI / 180);
				canvasContext.drawImage(image, 0, 0);
				break;
			case 90 :
				canvas.setAttribute('width', image.height);
				canvas.setAttribute('height', image.width);
				canvasContext.rotate(p_deg * Math.PI / 180);
				canvasContext.drawImage(image, 0, -image.height);
				break;
			case 180 :
				canvas.setAttribute('width', image.width);
				canvas.setAttribute('height', image.height);
				canvasContext.rotate(p_deg * Math.PI / 180);
				canvasContext.drawImage(image, -image.width, -image.height);
				break;
			case 270 :
			case -90 :
				canvas.setAttribute('width', image.height);
				canvas.setAttribute('height', image.width);
				canvasContext.rotate(p_deg * Math.PI / 180);
				canvasContext.drawImage(image, -image.width, 0);
				break;
		};
		
	} else {
		/*
		Ok!: MSIE 6 et 7
		*/
		var image = document.getElementById('image');
		switch(p_deg) {
			default :
			case 0 :
				image.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0)';
				break;
			case 90 :
				image.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)';
				break;
			case 180 :
				image.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)';
				break;
			case 270 :
			case -90 :
				image.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)';
				break;
		};
		
	};
};


window.onload = function() {
	var image = document.getElementById('image');
	var canvas = document.getElementById('canvas');
	if(canvas.getContext) {
		image.style.visibility = 'hidden';
		image.style.position = 'absolute';
	} else {
		canvas.parentNode.removeChild(canvas);
	};
	
	rotate(0);
};

&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;


&lt;p&gt;
	rotate:
	&lt;input type="button" value="0&deg;" onclick="rotate(0);" /&gt;
	&lt;input type="button" value="90&deg;" onclick="rotate(90);" /&gt;
	&lt;input type="button" value="180&deg;" onclick="rotate(180);" /&gt;
	&lt;input type="button" value="-90&deg;" onclick="rotate(-90);" /&gt;
&lt;/p&gt;


&lt;p&gt;
	&lt;img id="image" src="http://www.google.com/intl/en_ALL/images/logo.gif" alt="" /&gt;
	&lt;canvas id="canvas"&gt;&lt;/canvas&gt;
&lt;/p&gt;


&lt;/body&gt;
&lt;/html&gt;

</pre>

<hr /><a href="http://res.feedsportal.com/viral/bookmark_fr.cfm?link=http%3A%2F%2Fwww.ab-d.fr%2Fdate%2F2008-05-18%2F&title=Effectuer+une+rotation+d%27image+en+CSS+%28+rotate+balise+canvas+HTML5+%29"><img src="http://www.ab-d.fr/images/bookmark.gif" border="0" /></a><br /><br />]]></description>
			<comments>http://www.ab-d.fr/tag/Canvas/</comments>
			<guid isPermaLink="false">http://www.ab-d.fr/date/2008-05-18/</guid>
		</item>

	</channel>
</rss>
