БлогNot. Кросс-браузерная канва для вывода рисунков (Javascript)

Кросс-браузерная канва для вывода рисунков (Javascript)

Я уже писал о теге <canvas> вот здесь. Его нетрудно использовать не только для программного рисования на Web-страницах, но и в качестве полноценного "полотна" для вывода готовых рисунков. Приведём небольшой пример, касающийся последнего применения.

Вставим в документ HTML готовый скрипт, реализующий <canvas> для Internet Explorer - единственного пока не поддерживающего тег браузера. Так как скрипт у меня уже лежит на домашней страничке, оттуда его и возьму:

<!--[if IE]><script type="text/javascript" src="http://nickolay.info/jscript/jscanvas/excanvas.js"></script><![endif]-->

Создадим в документе канву размером 640x480 пикселов.

<canvas style='border:1px dashed #888;' id='canvasId' width='640' height='480'>
 Извините, тег Canvas недоступен!
</canvas>

С помощью функции draw(id,url), написанной на Javascript (параметр id будет содержать идентификатор канвы - значение её атрибута id, а параметр url - URL-адрес рисунка), подготовим всё для вывода картинки по центру канвы:

<script type="text/javascript">
function draw (id,url) {
 var canvas = document.getElementById(id).getContext('2d');
 var Width=document.getElementById(id).width;
 var Height=document.getElementById(id).height;
 var iWidth=0, iHeight=0;
 var img = new Image();
 img.src = url;
 img.onload = function() { 
  iWidth=this.width; iHeight=this.height; 
  if (iWidth > Width) { document.getElementById(id).width = iWidth; }
  if (iHeight > Height) { document.getElementById(id).height = iHeight; }
  x = (Width - iWidth)/2; if (x<0) x=0; 
  y = (Height - iHeight)/2; if (y<0) y=0; 
  canvas.drawImage(img,x,y); 
 }
}
</script>

В этом коде рисунок размещается по центру канвы, если её размер достаточно велик, в противном случае канва расширяется до размеров рисунка. Небольшой нюанс состоит в том, что в яваскрипте узнать реальные размеры изображения можно только после его загрузки, так что ширина рисунка iWidth и высота iHeight опеределяются внутри вложенной функции, вызываемой по событию onload вновь созданного рисунка. Там же происходит и отрисовка.

Осталось только вызвать нашу функцию:

<body onload="draw('canvasId','http://nickolay.info/img/birthday.jpg')">

Разумеется, отрисовка может происходить не только по событию полной загрузки страницы, но и по какому-то другому событию, скажем, нажатию кнопки в форме:

<input type="button" value="Draw" 
 onclick="draw('canvasId','http://nickolay.info/img/birthday.jpg')">

Ниже - ссылка на реализацию этого примера непосредственно в файле HTML:

 Увидеть пример в работе можно на постоянной странице статьи

11.11.2010, 16:03 [10385 просмотров]


теги: программирование javascript html графика ie

К этой статье пока нет комментариев, Ваш будет первым