Поиск…
Как добавить элемент холста Html5 на веб-страницу
Html5-Canvas ...
- Является элементом Html5.
- Поддерживается в большинстве современных браузеров (Internet Explorer 9+).
- Является видимым элементом, который по умолчанию прозрачен
- Имеет ширину по умолчанию 300 пикселей и высоту по умолчанию 150 пикселей.
- Требуется JavaScript, потому что все содержимое должно быть программно добавлено в Canvas.
Пример. Создайте элемент Html5-Canvas, используя разметку Html5 и JavaScript:
<!doctype html>
<html>
<head>
<style>
body{ background-color:white; }
#canvasHtml5{border:1px solid red; }
#canvasJavascript{border:1px solid blue; }
</style>
<script>
window.onload=(function(){
// add a canvas element using javascript
var canvas=document.createElement('canvas');
canvas.id='canvasJavascript'
document.body.appendChild(canvas);
}); // end $(function(){});
</script>
</head>
<body>
<!-- add a canvas element using html -->
<canvas id='canvasHtml5'></canvas>
</body>
</html>
Размер и разрешение холста
Размер холста - это область, которую он занимает на странице, и определяется свойствами ширины и высоты CSS.
canvas {
width : 1000px;
height : 1000px;
}
Разрешение холста определяет количество содержащихся в нем пикселей. Разрешение задается установкой свойств ширины и высоты элемента холста. Если не указано, размер по умолчанию составляет 300 на 150 пикселей.
Следующий холст будет использовать указанный выше размер CSS, но поскольку width
и height
не указаны, разрешение будет 300 на 150.
<canvas id="my-canvas"></canvas>
Это приведет к тому, что каждый пиксель будет растягиваться неравномерно. Аспект пикселя равен 1: 2. Когда холст растянут, браузер будет использовать билинейную фильтрацию. Это приводит к размыванию пикселей, которые растянуты.
Для достижения наилучших результатов при использовании холста убедитесь, что разрешение холста соответствует размеру экрана.
Следуя приведенному выше стилю CSS, чтобы соответствовать размеру экрана, добавьте холст с width
и height
установленной на тот же подсчет пикселей, что и стиль.
<canvas id = "my-canvas" width = "1000" height = "1000"></canvas>
Прозрачный холст
Много раз при работе с холстом вам нужно иметь холст, чтобы хранить некоторые данные пикселя intrum. Легко создать экранный холст, получить 2D-контекст. Внеэкранный холст также будет использовать доступное графическое оборудование для рендеринга.
Следующий код просто создает холст и заполняет его синими пикселями.
function createCanvas(width, height){
var canvas = document.createElement("canvas"); // create a canvas element
canvas.width = width;
canvas.height = height;
return canvas;
}
var myCanvas = createCanvas(256,256); // create a small canvas 256 by 256 pixels
var ctx = myCanvas.getContext("2d");
ctx.fillStyle = "blue";
ctx.fillRect(0,0,256,256);
Много раз экранный холст будет использоваться для многих задач, и у вас может быть много холстов. Чтобы упростить использование холста, вы можете прикрепить контур canvas к холсту.
function createCanvasCTX(width, height){
var canvas = document.createElement("canvas"); // create a canvas element
canvas.width = width;
canvas.height = height;
canvas.ctx = canvas.getContext("2d");
return canvas;
}
var myCanvas = createCanvasCTX(256,256); // create a small canvas 256 by 256 pixels
myCanvas.ctx.fillStyle = "blue";
myCanvas.ctx.fillRect(0,0,256,256);
Обнаружение положения мыши на холсте
В этом примере показано, как получить положение мыши относительно холста, так что (0,0)
будет верхним левым углом холста HTML5. e.clientX
и e.clientY
будут получать позиции мыши относительно верхней части документа, чтобы изменить это, чтобы основываться на верхней части холста мы вычитаем left
и right
положение холста от клиентов X и Y.
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.font = "16px Arial";
canvas.addEventListener("mousemove", function(e) {
var cRect = canvas.getBoundingClientRect(); // Gets CSS pos, and width/height
var canvasX = Math.round(e.clientX - cRect.left); // Subtract the 'left' of the canvas
var canvasY = Math.round(e.clientY - cRect.top); // from the X/Y positions to make
ctx.clearRect(0, 0, canvas.width, canvas.height); // (0,0) the top left of the canvas
ctx.fillText("X: "+canvasX+", Y: "+canvasY, 10, 20);
});
Использование Math.round
должно гарантировать x,y
позиции x,y
являются целыми числами, поскольку ограничивающий прямоугольник холста может не иметь целочисленных позиций.
Привет, мир
HTML
<canvas id="canvas" width=300 height=100 style="background-color:#808080;">
</canvas>
Javascript
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.font = "34px serif";
ctx.textAlign = "center";
ctx.textBaseline="middle";
ctx.fillStyle = "#FFF";
ctx.fillText("Hello World",150,50);
Результат
Индекс для возможностей холста Html5 Canvas & Uses
Возможности холста
Canvas позволяет программно рисовать на вашей веб-странице:
- Изображения ,
- Тексты ,
- Строки и кривые .
Картины холста могут быть широко оформлены:
- ширина хода ,
- цвет обводки ,
- цвет заливки формы ,
- непрозрачность ,
- затенение ,
- линейные градиенты и радиальные градиенты ,
- шрифт ,
- размер шрифта ,
- выравнивание текста ,
- текст можно погладить, заполнить или погладить и заполнить ,
- изменение размера изображения ,
- обрезка изображения ,
- композитинга
Использование холста
Чертежи можно комбинировать и размещать в любом месте на холсте, чтобы его можно было использовать для создания:
- Приложения Paint / Sketch,
- Быстрые интерактивные игры,
- Анализ данных, как диаграммы, графики,
- Photoshop-подобный образ,
- Flash-реклама и Flashy-контент.
Canvas позволяет вам манипулировать красками, зелеными, синими и альфа-компонентами цветов. Это позволяет холсту манипулировать изображениями с результатами, подобными Photoshop.
- Перекрашивайте любую часть изображения на уровне пикселей (если вы используете HSL, вы можете даже перекрасить изображение, сохраняя при этом важное освещение и насыщенность, чтобы результат не выглядел так, как будто кто-то ударил краской на изображении),
- «Нокаут» фон вокруг человека / предмета в изображении,
- Обнаружить и налить часть изображения (например, изменить цвет лепестка с щелчком мыши с зеленого на желтый - только этот щелклый лепесток!),
- Сделайте Перспективное деформирование (например, оберните изображение вокруг кривой чашки),
- Изучите изображение для контента (например, распознавание лица),
- Ответьте на вопросы об изображении: есть ли автомобиль, припаркованный в этом изображении моего места для парковки ?,
- Применение стандартных фильтров изображений (оттенки серого, сепия и т. Д.)
- Примените любой фильтр экзотических изображений, который вы можете придумать (Sobel Edge Detection),
- Объедините изображения. Если бы дорогая бабушка Сью не могла дойти до воссоединения семьи, просто «фотошоп» ее в образ воссоединения. Не нравится кузен Фил - просто «фотошоп его,
- Воспроизведение видео / захват кадра из видео,
- Экспортируйте содержимое холста как .jpg | .png (вы даже можете обрезать или аннотировать изображение и экспортировать результат в виде нового изображения),
О перемещении и редактировании рисунков холста (например, для создания игровой игры):
- После того, как что-то было нарисовано на холсте, этот существующий чертеж не может быть перемещен или отредактирован. Это распространенное заблуждение о том, что холст-чертежи являются подвижными, заслуживает уточнения: существующие рисунки холста не могут быть отредактированы или перемещены!
- Холст рисует очень, очень быстро. Холст может рисовать сотни изображений, текстов, линий и кривых за долю секунды. Он использует графический процессор, если он доступен для ускорения рисования.
- Холст создает иллюзию движения, быстро и многократно рисуя что-то, а затем перерисовывая его в новом положении. Подобно телевидению, эта постоянная перерисовка дает зрителям иллюзию движения.
Поворот
Метод rotate(r)
2D-контекста поворачивает холст на указанное количество r
радианов вокруг начала координат.
HTML
<canvas id="canvas" width=240 height=240 style="background-color:#808080;">
</canvas>
<button type="button" onclick="rotate_ctx();">Rotate context</button>
Javascript
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var ox = canvas.width / 2;
var oy = canvas.height / 2;
ctx.font = "42px serif";
ctx.textAlign = "center";
ctx.textBaseline = "middle";
ctx.fillStyle = "#FFF";
ctx.fillText("Hello World", ox, oy);
rotate_ctx = function() {
// translate so that the origin is now (ox, oy) the center of the canvas
ctx.translate(ox, oy);
// convert degrees to radians with radians = (Math.PI/180)*degrees.
ctx.rotate((Math.PI / 180) * 15);
ctx.fillText("Hello World", 0, 0);
// translate back
ctx.translate(-ox, -oy);
};
Живая демонстрация на JSfiddle
Сохранить файл canvas в файл
Вы можете сохранить холст в файл изображения с помощью метода canvas.toDataURL()
, который возвращает URI данных для данных изображения холста.
Метод может принимать два необязательных параметра canvas.toDataURL(type, encoderOptions)
: type
- это формат изображения (если не указано значение по умолчанию - image/png
); encoderOptions
- это число от 0 до 1, указывающее качество изображения (по умолчанию - 0,92).
Здесь мы рисуем холст и прикрепляем URI данных холста к ссылке «Загрузить в myImage.jpg».
HTML
<canvas id="canvas" width=240 height=240 style="background-color:#808080;">
</canvas>
<p></p>
<a id="download" download="myImage.jpg" href="" onclick="download_img(this);">Download to myImage.jpg</a>
Javascript
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var ox = canvas.width / 2;
var oy = canvas.height / 2;
ctx.font = "42px serif";
ctx.textAlign = "center";
ctx.textBaseline = "middle";
ctx.fillStyle = "#800";
ctx.fillRect(ox / 2, oy / 2, ox, oy);
download_img = function(el) {
// get image URI from canvas object
var imageURI = canvas.toDataURL("image/jpg");
el.href = imageURI;
};
Живой демо на JSfiddle.