用HTML5 Canvas为Web图形创建特效
HTML5 Canvas 将使用像素在屏幕上绘制图形图像。 本节演示了五种用于操作像素以创建摄影特效的 Canvas 技术。 您可使用这些技术来生成独具特色的图像,为您的网站、博客、视频游戏画面、广告和插图等提供信息或艺术趣味。
本教程包含五个独立的带有注释的代码示例,为您演示了这些技术如何改善一张有关美洲鹰的摄影图像。 这些示例解释了如何执行以下操作: 将美洲鹰的照片放置在一个圆形中;向背景中添加白雪纹理图片;大幅改变色彩构成;使图像变得透明;并将整张图片从彩色变为黑白。
本主题介绍如何使用 HTML5 Canvas 将照片放入不同形状中,并为 Web 设计创建视觉特效。
本主题包含一个独立的带有注释的代码示例,演示如何将一张有关美洲鹰的照片放入到一个圆形形状中。 此代码示例演示了如何使用 Canvas 加载美洲鹰照片并显示在屏幕上。 然后,它演示如何使用 Canvas arc 方法创建一个圆,并围绕美洲鹰添加一个白色圆形框。 此示例末尾的讨论材料将说明有关代码如何工作来开发此技术的更多信息。
Canvas 代码示例讨论:
此讨论解释了此 Canvas 示例的设计和结构以及所有部件如何协同工作。 此示例使用标准 HTML5 标头 ,以便浏览器可以将其作为 HTML5 规范的一部分加以区别。 代码分成两个主要部分:
1、主体代码
2、脚本代码
主体代码
当加载页面时,主体标记使用 onload 函数来调用 displayImage 函数。 将美洲鹰的原始图像加载到主体中,以便您可以将其与要由 Canvas 修改的图像进行比较。 canvas 标记是主体的一部分。 指定了 Canvas 的初始宽度和高度,还指定了 id 特性。 必须使用 ID,才能将 Canvas 元素添加到页面的对象模型中。
脚本代码
脚本代码包括两个函数: displayImage和getColorData。 加载页面时将调用 displayImage 函数。 getColorData 函数是从 displayImage 调用的。 在脚本部分的开头创建一个全局变量以创建一个空白图像文件,稍后将会用到这个文件。
displayImage 函数
加载页面时将调用此函数。 它通过在主体代码中使用 canvas 元素的 ID 来获取画布。 然后,它获取画布的 CanvasRenderingContext2D 对象,使其准备好接受绘制,并使用 DrawImage 将图像加载到上下文中。 在将上下文初始化为二维画布之后,就可以在画布上开始绘制了。
该函数的最后工作是通过提供一条路径来指定图像的来源。 由于图像可能不会立即加载,因此设置了一个事件,以便在图像实际加载之后调用某个函数。 在加载图像之后,将会显示图像,并调用用于完成绘制工作的 changeImage 函数。
changeImage 函数
通过使用 arc 方法围绕图像中心绘制一个圆,从而修改图像。 图像为 200 x 200 像素,圆的半径将为 150 个像素。 因为圆的中心是图像中心,并且圆边框为 100 个像素厚,因此外部边缘上的像素将用白色像素替换。 strokeStyle 属性、lineWidth 属性、beginPath 方法、arc 方法、closePath 方法和 stroke 方法定义这个圆。
代码要求
此代码在 Windows Internet Explorer 9 中运行。 它无法在早期版本的 Windows Internet Explorer 中正常运行,但也许能在支持 HTML5 Canvas 的其他浏览器中运行。
1. [代码][HTML]代码
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
//Global variables
var myImage =
new Image(); // Create a new blank image.
// Load the image and display it.
function displayImage() {
//
Get the canvas element.
canvas = document.getElementById("myCanvas");
// Make sure you got it.
if (canvas.getContext) {
// Specify 2d canvas type.
ctx = canvas.getContext("2d");
// When the image is loaded, draw it.
myImage.onload =
function() {
// Load the image into the context.
ctx.drawImage(myImage, 0, 0);
//
Get
and modify the image data.
changeImage();
}
// Define the source of the image.
myImage.src =
"http://samples.msdn.microsoft.com/workshop/samples/canvas/kestral.png";
}http://www.enterdesk.com/special/sexygirl/
}美女图片
function changeImage() {
ctx.strokeStyle =
"white";
ctx.lineWidth =
"100";
ctx.beginPath();
ctx.arc(100, 100, 150, 0, Math.PI *
2, true);
ctx.closePath();
ctx.stroke();
}
</script>
</head>
<body onload="displayImage()">
<h1>
American Kestral
</h1>
<p>
The original image is
on the left
and the modified image is
on the right.
</p>
<img id="myPhoto" src="http://samples.msdn.microsoft.com/workshop/samples/canvas/kestral.png">
<canvas id="myCanvas" width="200" height="200">
</canvas>
<p>
Public domain image courtesy of U.S. Fish and Wildlife Service.
</p>
</body>
</html>
用HTML5 Canvas为Web图形创建特效的更多相关文章
- HTML5 Canvas彩色小球碰撞运动特效
脚本简介 HTML5 Canvas彩色小球碰撞运动特效是一款基于canvas加面向对象制作的运动小球动画特效. 效果展示 http://hovertree.com/texiao/html5/39/ ...
- 学习笔记:HTML5 Canvas绘制简单图形
HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...
- 【HTML】html5 canvas全屏烟花动画特效
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- html5 canvas画图之图形随拖动而复制(有操作指示)
学习html5 canvas,写了一个小练习来加深理解,可以实现图形随拖动而复制. <!DOCTYPE html> <html> <head> <meta c ...
- HTML5技术实现Web图形图像处理——WebPhotoshop精简版
WebPhotoshop精简版是利用HTML5技术在Web上实现对图形图像的处理,构建易维护.易共享.易于拓展.实时性的Web图形图像处理平台. 精简版功能包括:图形绘制.图像处理.图像操作.完整版包 ...
- 基于 HTML5 Canvas 实现的文字动画特效
前言 文字是网页中最基本的元素,一般我们在网页上都是展示的静态文字,但是就效果来说,还是比较枯燥的.文字淡入淡出的动画效果在项目中非常实用,如果有某些关键的文字,可以通过这种动态的效果来提醒用户阅读. ...
- 基于HTML5 Canvas粒子效果文字动画特效
之前我们分享过很多超酷的文字特效,其中也有利用HTML5和CSS3的.今天我们要来分享一款基于HTML5 Canvas的文字特效,输入框中输入想要展示的文字,回车后即可在canvas上绘制出粒子效果的 ...
- html5 canvas实现图片玻璃碎片特效
今天要为大家带来一款html5 canvas实现的图片玻璃碎片特效.图片以玻璃碎片的形式出现到界面中,然后似玻璃被打碎的效果渐消息.效果图如下: 在线预览 源码下载 实现代码: html代码: & ...
- 基于 HTML5 Canvas 的 3D 机房创建
对于 3D 机房来说,监控已经不是什么难事,不同的人有不同的做法,今天试着用 HT 写了一个基于 HTML5 的机房,发现果然 HT 简单好用.本例是将灯光.雾化以及 eye 的最大最小距离等等功能在 ...
随机推荐
- 关于 Bellman-Ford 与 Floyd 算法的一点感想
在四种常用的最短路算法 Dijkstra, SPFA, floyd, Bellman-Ford 中, Dijks 和 SPFA 的使用较为普遍, 对大多数人来说, 也较为熟悉. 然而, floyd 与 ...
- maven打包自动配置数据库链接信息
pom.xml加入下面代码 <profiles> <profile> <id>dev</id> <activation> <activ ...
- NHibernate剖析:Mapping篇之Mapping-By-Code(1):概览
ModelMapper概述 NHibernate3.2版本号集成Mapping-By-Code(代码映射),其设计思想来源于ConfORM.代码总体构思基于"Loquacious" ...
- centos7+ 安装Docker 17.03.2
cnetos7 安装 docker17.03.2 升级内核 http://m.blog.csdn.net/article/details?id=52047780 注意切换内核时查看 新内核位置 awk ...
- electron 缓存目录 禁用缓存
C:\Users\Administrator\AppData\Roaming\linksame // 禁用缓存 app.commandLine.appendSwitch("--disable ...
- LINUX下GDB反汇编和调试
Linux下的汇编与Windows汇编最大的不同就是第一个操作数是原操作数,第二个是目的操作数.而Windows下却是相反. 1. 基本操作指令 简单的操作数类型说明.一般有三种. (1)马上数操作数 ...
- cas 单点登录(SSO)之中的一个: jasig cas-server 安装
cas 单点登录(SSO)实验之中的一个: jasig cas-server 安装 參考文章: http://my.oschina.net/indestiny/blog/200768#comments ...
- mysql 海量数据删除
百度知道 - mysql删除海量数据 MySQL 数据库删除大批量数据的优化 看到这儿的话,最后看下这篇文章,对于操作海量数据的sql深入分析 cnblogs - 深度分析DROP,TRU ...
- CrtmpServer getApplication注册流程
最近在研究 CrtmpServer getApplication注册流程,以备查阅 图1. 加载动态库流程 图2配置application流程
- 技术总结--android篇(三)--代码规格和编码规范
命名规则 变量名: 1)尽量要取有意义的名字,比方说:一个用户名的成员变量.应该写成username.而不要仅仅写个string: 2)假设是常量.既在编码过程中.这个值是不会改变的,应该写成大写的名 ...