已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、创建图像对象在 HTML5 中,Image 对象对应着一幅图片,想要获取一个图像对象,有以下几种方法:1)通过 document.images 集合、document.getElementsByTagName 方法或者 document.getElementById 方法来获取网页内已经存在的图片对象;2)用 document.getElementsByTagName 或 document.getElementById 方法来获取另外一个 Canvas 对象,将这个 Canvas 对象作为一个图像对象;3)最常用的方法:创建一个新的空 Image 对象,给他一个图片的超链接,代码如下:/创建一个空图像对象var img = new Image();/给图像对象一个图片超链接img.src = myImage.png; 4) 最后一种是通过 data: url 方式嵌入图像,这种方法很奇妙,他可以用一个很长的字符串来表示一幅图像。那么这个很长的字符串是怎么来的呢?他是把真正的图像文件(bmp jpg 等等)通过 Base64 编码而来,具体的编码程序网上能搜索到很多,我博客里就有一个 Python 版的。用这种方式的好处就是,图片资源始终内嵌在 HTML 网页文件中,缺点是数据量太大,而且图片没办法缓存,导致网页文件打开速度变慢。下面的字符串就是一幅美女图片的 Base64 编码的一小段,让大家看看是什么样子的:/9j/4QDfRXhpZgAASUkqAAgAAAAFABIBAwABAAAAAQAAADEBAgAVAAAASgAAADIBAgAUAAAAXw这些乱七八糟的东西就包含了美女图片的一小部分内容了,后面我们将把它绘制到 Canvas 上。二、绘制图像对象我们得到一个图像对象后,它只是在内存中,我们怎么才能将它绘制到画布上呢? 上下文对象有一个绘制图像对象的方法:drawImage(image, x, y)简单吧?image 就是你事先准备好的图像对象,x, y 就是图像左上角放置的位置 ,这个方法调用后,你的图像就会出现在 Canvas 上了,下面我们来把上面的美女图像绘制出来,代码如下: 你的浏览器不支持 <canvas>标签,请使用 Chrome 浏览器 或者 FireFox 浏览器 /美女图的 Base64 编码 IMG_SRC=data:image/gif;base64,/9j/4QDfRXhpZgAASUkqAAgAAAA./省略40字节 /缩小版本的美女图 IMG_SRC_SMALL=data:image/gif;base64,/9j/4QDfRXhpZgAASUkqAAgAAAA. /省略40字节 function Show() /获取画布对象 ctx = document.getElementById(canvas1).getContext(2d); /创建图像对象 img=new Image(); /图像被装入后触发 img.onload=function() ctx.drawImage(img,0,0); /指定图像源 img.src=IMG_SRC; function Clear() /清除画布 ctx = document.getElementById(canvas1).getContext(2d); ctx.clearRect(0,0,250,300); 注意:把绘制方法放到图像对象的 onload 事件中,是为了确保图像在完全装入后才绘制三、缩放图像同样的 imageDraw 方法,增加两个参数,就可以对图像实现缩放,如下:drawImage(image, x, y, width, height)width 代表你想将图像绘制成多宽,height 代表你想将图像绘制成多高,设定好后系统会自动按比例进行缩放。下面的例子我们来模仿一个常见的图像软件的小功能,通过拖动滑动条对图像进行缩放,代码如下: 你的浏览器不支持 <canvas>标签,请使用 Chrome 浏览器 或者 FireFox 浏览器注意:下面的 Range 控件只能在 Google Chrome 浏览器中正确呈现横向缩放input type=range min=1 max=20 onchange=Scale1(event)/& gt;纵向缩放input type=range min=1 max=20 onchange=Scale2(event)/& gt;按比例缩放input type=range min=1 max=20 onchange=Scale3(event)/& gt;平铺 function Scale1() /计算比例 var scale=event.target.value/10 /获取画布对象 ctx = document.getElementById(canvas2).getContext(2d); /清空 ctx.clearRect(0,0,250,300); /创建图像对象 img=new Image(); /图像被装入后触发 img.onload=function() /横向缩放绘制 ctx.drawImage(img,0,0,img.width*scale,img.height); /指定图像源 img.src=IMG_SRC; function Scale2() /计算比例 var scale=event.target.value/10 /获取画布对象 ctx = document.getElementById(canvas2).getContext(2d); /清空 ctx.clearRect(0,0,250,300); /创建图像对象 img=new Image(); /图像被装入后触发 img.onload=function() /纵向缩放绘制 ctx.drawImage(img,0,0,img.width,img.height*scale); /指定图像源 img.src=IMG_SRC; function Scale3() /计算比例 var scale=event.target.value/10 /获取画布对象 ctx = document.getElementById(canvas2).getContext(2d); /清空 ctx.clearRect(0,0,250,300); /创建图像对象 img=new Image(); /图像被装入后触发 img.onload=function() /按比例缩放绘制 ctx.drawImage(img,0,0,img.width*scale,img.height*scale); /指定图像源 img.src=IMG_SRC; function Scale4() /平铺比例 var scale=event.target.value; /获取画布对象 ctx = document.getElementById(canvas2).getContext(2d); /清空 ctx.clearRect(0,0,250,300); /创建图像对象 img=new Image(); /图像被装入后触发 img.onload=function() /平铺个数 var n1=img.width/scale; var n2=img.height/scale; for(var i=0;in1;i+) for(var j=0;jn2;j+) ctx.drawImage(img,i*img.width/scale,j*img.height/scale,img.width/scale,img.height/scale); /指定图像源 img.src=IMG_SRC; 注意:下面的 Range 控件只能在 Google Chrome 浏览器中正确呈现。四、裁剪图像图像裁剪同样是使用 imageDraw 方法,原型如下:drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight),其中sx, sy 是图像上的一个坐标位置,这个坐标是裁剪的起始点,sWidth, sHeight 是裁剪的宽度和长度,有了这四个参数,我们就可以将图像上的任意区域裁剪出来了。另外,dx, dy 是画布上的一个坐标为止,裁剪出来的图像的左上角将放置在这个位置,dWidth, dHeight 是设置裁剪出来的图像绘制成多长和多宽,可以缩放,裁剪图像比较简单,就不给例子了:五、图案在上面的图像缩放中,我们用循环的方法实现了图像的平铺,其实还有更方便的方法,就是用图案对象填充画布,图案对象用下面的方法创建:createPattern(image,type)。其中,Type 必须是下面的字符串值之一:repeat,repeat-x,repeat-y 和 no-repeat。得到图案对象后,可以将其设置给上下文对象的 fillStyle 属性,然后再填充画布,就可以看到重复填充的效果了。下面的代码中,我们将把缩小版本的美女图用 repeat 模式,平铺到画布上: 你的浏览器不支持 <canvas>标签,请使用 Chrome 浏览器 或者 FireFox 浏览器 /美女图的缩小版本 IMG_SRC_SMALL=data:image/gif;base64,/9j /4QDfRXhpZgAASUkqAAgAAAAFABIBA.;/省略四个字节 function Patterns() /获取画布对象 ctx = document.getElementById(canvas3).getContext(2d); /创建图像对象 img=new Image(); /指定图像源 img.src=IMG_SRC_SMALL; /图像被装入后触发 img.onload=function() /创建图案 var ptrn = ctx.createPattern(img,repeat); /将图案设置为填充样式 ctx.fillStyle = ptrn; /填充画布 ctx.fillRect(0,0,250,300); function ClearPatterns() /获取画布对象 ctx = document.getElementById(canvas3).getContext(2d); /清空 ctx.clearRect(0,0,250,300); 六、字体HTML5 的没有专门的字体对象,上下文对象中有三个属性用来设置字体,两个方法来绘制字符串,他们是:font:文字字体,同 CSS font-family 属性。textAlign:文字水平对齐方式。可取属性值: start, end, left, right, center。默认值: start。textBaseline:文字竖直对齐方式。可取属性值:top, hanging, middle, alphabetic, ideographic, bottom。默认值:alphabetic。fillText 和 strokeText:用填充方式和轮廓方式绘制字符串。下面的代码绘制两个不同设置的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48179-2026集成电路电子设计自动化工具术语
- T/CASMES 526-2025市政道路园林绿化工程施工质量验收规范
- DB31/T 1438.2-2024用水定额 第2部分:工业
- T/CES 059-2021电力气象监测装置通用技术规范
- DB32/T 5378-2026畜禽粪肥还田环境承载力测算方法
- T/HNNMIA 30-2022硬质合金与钢钎焊技术导则
- T/CTS 24-2024道路交通安全宣传教育资料标签设置与编码规范
- T/CEPPEA 5065-2025电力工程消防应急照明和疏散指示系统设计技术规程
- T/JAASS 40-2022畜禽粪肥兽药污染防控技术规范
- T/CI 1093-2025隧道施工移动式高强安全保障舱
- 2025年湖北卷化学-加标签(精校版)(无答案)
- 2026秋新教材统编版四年级上册语文第一单元教案(大单元教学设计)
- 5.2 必须长期坚持的指导思想 课件(25张幻灯片)+内嵌视频
- 室内设计 课件 模块三 办公空间设计
- 2026年高考全国一卷数学试题真题及答案详解(精校打印)
- 2026年四川省拟任县处级领导干部理论(任职资格考试)全真模拟试题及答案
- 1.2 地球与地球仪 第3课时课件(共20张) 七年级地理上学期人教版
- 终身学习:中学教师专业成长与实践路径
- 台州市黄岩城乡自来水有限公司招聘笔试题库2026
- 2026年上海安全员A证考试题库(附答案)
- 常州大学怀德学院教师招聘考试真题及答案
评论
0/150
提交评论