`
wjlgryx
  • 浏览: 306815 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

html5 使用图像

阅读更多
Canvas 相当有趣的一项功能就是可以引入图像,它可以用于图片合成或者制作背景等。而目前仅可以在图像中加入文字(标准说明中并没有包含绘制文字的功能)。只要是 Gecko 支持的图像(如 PNG,GIF,JPEG等)都可以引入到 canvas 中,而且其它的 canvas 元素也可以作为图像的来源。
引入图像 Importing images
引入图像只需要简单的两步:
• 第一当然是来源图片,不是简单的 URL 路径,但可以是一个 JavaScript 的 Image 对象引用,又或者其它的 canvas 元素。
• 然后用 drawImage 方法将图像插入到 canvas 中。
先来看看第一步,基本上有四种可选方式:
引用页面内的图片 Using images which are on the same page
我们可以通过 document.images 集合、document.getElementsByTagName 方法又或者document.getElementByIdx_x_x_x 方法来获取页面内的图片(如果已知图片元素的 ID。
使用其它 canvas 元素 Using other canvas elements
和引用页面内的图片类似地,用 document.getElementsByTagName 或document.getElementByIdx_x_x_x 方法来获取其它 canvas 元素。但你引入的应该是已经准备好的 canvas。
一个常用的应用就是为另一个大的 canvas 做缩略图。
由零开始创建图像 Creating an image from scratch
另外,我们可以用脚本创建一个新的 Image 对象,但这种方法的主要缺点是如果不希望脚本因为等待图片装置而暂停,还得需要突破预装载。
我们可以通过下面简单的方法来创建图片:
1. var img = new Image();   // Create new Image object 
2. img.src = 'myImage.png'; // Set source path 
当脚本执行后,图片开始装载。若调用 drawImage 时,图片没装载完,脚本会等待直至装载完毕。如果不希望这样,可以使用 onload 事件:
1. var img = new Image();   // Create new Image object 
2. img.onload = function(){ 
3.   // execute drawImage statements here 
4. } 
5. img.src = 'myImage.png'; // Set source path 
如果你只用到一张图片的话,这已经够了。但一旦需要不止一张图片,那就需要更加复杂的处理方法,但图片预装载策略超出本教程的范围,感兴趣的话可以参考JavaScript Image Preloader。
通过 data: url 方式嵌入图像 Embedding an image via data: url
我们还可以通过 data: url 方式来引用图像。Data urls 允许用一串 Base64 编码的字符串的方式来定义一个图片。其优点就是图片内容即时可用,无须再到服务器兜一圈。(还有一个优点是,可以将 CSS,JavaScript,HTML 和 图片全部封装在一起,迁移起来十分方便。)缺点就是图像没法缓存,图片大的话内嵌的 url 数据会相当的长:
1. var img_src = 'data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw=='; 

drawImage
一旦获得了源图对象,我们就可以使用 drawImage 方法将它渲染到 canvas 里。drawImage 方法有三种形态,下面是最基础的一种。
drawImage(image, x, y)
其中 image 是 image 或者 canvas 对象,x 和 y 是其在目标 canvas 里的起始坐标。
drawImage 示例 1
下面一个例子我用一个外部图像作为一线性图的背景。用背景图我们就不需要绘制负责的背景,省下不少代码。这里只用到一个 image 对象,于是就在它的onload 事件响应函数中触发绘制动作。drawImage 方法将背景图放置在 canvas 的左上角 (0,0) 处。
查看示例
1. function draw() { 
2.     var ctx = document.getElementByIdx_x_x_x('canvas').getContext('2d'); 
3.     var img = new Image(); 
4.     img.onload = function(){ 
5.       ctx.drawImage(img,0,0); 
6.       ctx.beginPath(); 
7.       ctx.moveTo(30,96); 
8.       ctx.lineTo(70,66); 
9.       ctx.lineTo(103,76); 
10.       ctx.lineTo(170,15); 
11.       ctx.stroke(); 
12.     } 
13.     img.src = 'images/backdrop.png'; 
14.   } 

缩放 Scaling
drawImage 方法的又一变种是增加了两个用于控制图像在 canvas 中缩放的参数。
drawImage(image, x, y, width, height)
当中 width 和 height 分别是图像在 canvas 中显示大小。
drawImage 示例 2

在这个例子里,我会用一张图片像背景一样在 canvas 中以重复平铺开来。实现起来也很简单,只需要循环铺开经过缩放的图片即可。见下面的代码,第一层for 循环是做行重复,第二层是做列重复的。图像大小被缩放至原来的三分之一,50x38 px。这种方法可以用来很好的达到背景图案的效果,在下面的教程中会看到。
注意:图像可能会因为大幅度的缩放而变得起杂点或者模糊。如果您的图像里面有文字,那么最好还是不要进行缩放,因为那样处理之后很可能图像里的文字就会变得无法辨认了。
查看示例

1. function draw() { 
2.     var ctx = document.getElementByIdx_x_x_x('canvas').getContext('2d'); 
3.     var img = new Image(); 
4.     img.onload = function(){ 
5.       for (i=0;i<4;i++){ 
6.         for (j=0;j<3;j++){ 
7.           ctx.drawImage(img,j*50,i*38,50,38); 
8.         } 
9.       } 
10.     } 
11.     img.src = 'images/rhino.jpg'; 
12.   } 

切片 Slicing
drawImage 方法的第三个也是最后一个变种有8个新参数,用于控制做切片显示的。
drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
第一个参数和其它的是相同的,都是一个图像或者另一个 canvas 的引用。其它8个参数最好是参照右边的图

解,前4个是定义图像源的切片位置和大小,后4个则是定义切片的目标显示位置和大小。
切片是个做图像合成的强大工具。假设有一张包含了所有元素的图像,那么你可以用这个方法来合成一个完整图像。例如,你想画一张图表,而手上有一个包含所有必需的文字的 PNG 文件,那么你可以很轻易的根据实际数据的需要来改变最终显示的图表。这方法的另一个好处就是你不需要单独装载每一个图像。
drawImage 示例 3


在这个例子里面我用到上面已经用过的犀牛图像,不过这次我要给犀牛头做个切片特写,然后合成到一个相框里面去。相框带有阴影效果,是一个以 24-bit PNG 格式保存的图像。因为 24-bit PNG 图像带有一个完整的 8-bit alpha 通道,与 GIF 和 8-bit PNG 不同,我可以将它放成背景而不必担心底色的问题。
我用一个与上面用到的不同的方法来装载图像,直接将图像插入到 HTML 里面,然后通过 CSS 隐藏(display:none)它。两个图像我都赋了 id ,方便后面使用。看下面的脚本,相当简单,首先对犀牛头做好切片(第一个 drawImage )放在 canvas 上,然后再上面套个相框(第二个 drawImage )。
查看示例
1. function draw() { 
2.   var canvas = document.getElementByIdx_x_x_x('canvas'); 
3.   var ctx = canvas.getContext('2d'); 
4.  
5.   // Draw slice 
6.   ctx.drawImage(document.getElementByIdx_x_x_x('source'), 
7.                 33,71,104,124,21,20,87,104); 
8.  
9.   // Draw frame 
10.   ctx.drawImage(document.getElementByIdx_x_x_x('frame'),0,0); 
11. } 

示例:画廊 Art gallery example


我这一章最后的示例是弄一个小画廊。画廊由挂着几张画作的格子组成。当页面装载好之后,为每张画创建一个 canvas 元素并用加上画框然后插入到画廊中去。
在我这个例子里面,所有“画”都是固定宽高的,画框也是。你可以做些改进,通过脚本用画的宽高来准确控制围绕它的画框的大小。
下面的代码应该是蛮自我解释的了。就是遍历图像对象数组,依次创建新的 canvas 元素并添加进去。可能唯一需要注意的,对于那些并不熟悉 DOM 的朋友来说,是 insertBefore 方法的用法。insertBefore 是父节点(单元格)的方法,用于将新节点(canvas 元素)插入到我们想要插入的节点之前。
查看示例
1. function draw() { 
2.  
3.   // Loop through all images 
4.   for (i=0;i<document.images.length;i++){ 
5.  
6.     // Don't add a canvas for the frame image 
7.     if (document.images[i].getAttribute('id')!='frame'){ 
8.  
9.       // Create canvas element 
10.       canvas = document.create_r_r_rElement('CANVAS'); 
11.       canvas.setAttribute('width',132); 
12.       canvas.setAttribute('height',150); 
13.  
14.       // Insert before the image 
15.       document.images[i].parentNode.insertBefore(canvas,document.images[i]); 
16.  
17.       ctx = canvas.getContext('2d'); 
18.  
19.       // Draw image to canvas 
20.       ctx.drawImage(document.images[i],15,20); 
21.  
22.       // Add frame 
23.       ctx.drawImage(document.getElementByIdx_x_x_x('frame'),0,0); 
24.     } 
25.   } 
26. } 

控制图像的缩放行为 Controlling image scaling behavior
Introduced in Gecko 1.9.2
(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)
Gecko 1.9.2 引入了 mozImageSmoothingEnabled 属性,值为 false 时,图像不会平滑地缩放。默认是true 。
1. cx.mozImageSmoothingEnabled = false;
分享到:
评论

相关推荐

    HTML5使用图像1案例.pdf

    本文将详细解析三个关于HTML5使用图像的案例,主要涉及如何在canvas元素中引入、绘制以及调整图像的大小。 案例1展示了如何使用`drawImage(image, dx, dy)`方法将图像引入到canvas中。在这个例子中,`drawImage`...

    HTML5使用图像2.pdf

    本文档专注于使用HTML5中的 `&lt;canvas&gt;` 元素对图像进行平铺和裁剪的操作,这是网页动态图形设计的重要组成部分。 1. **平铺图像** - HTML5 的 `&lt;canvas&gt;` 元素提供了一个强大的画布,可以用于绘制各种图形和图像。...

    HTML5使用图像2案例.pdf

    本篇文章将详细解析三个关于HTML5图像应用的案例。 案例1:图像平铺 在HTML5中,可以通过`&lt;canvas&gt;`元素结合JavaScript来实现图像的平铺效果。平铺是指将一个图像重复显示以填充指定的区域。案例1展示了如何使用`...

    HTML5使用图像1.pdf

    在HTML5中,`&lt;canvas&gt;`元素扮演着至关重要的角色,它允许开发者动态地绘制图形、图像以及进行各种复杂的视觉操作。本文档专注于介绍如何在HTML5的`&lt;canvas&gt;`元素中引入和绘制图像。 首先,我们要明白向`canvas`引入...

    HTML5专业级图像处理引擎

    在图像处理领域,HTML5的专业级图像处理引擎如腾讯的AlloyCrop,为移动应用和网页开发带来了革命性的变化。这款组件以其高效、轻量级的特点,成为了移动裁剪解决方案的首选。 AlloyCrop是腾讯推出的一款基于HTML5的...

    HTML5图形图像处理技术研究

    HTML5作为新一代的Web标准,对图形图像处理带来了重要的技术和创新。在传统的C/S架构桌面应用程序中,图形图像处理平台处理速度快,但由于界面和算法逻辑都集中在客户端,因此软件维护困难,共享性差。随着Web技术的...

    HTML5的图像及动画

    HTML5的图像及动画

    利用HTML5的画布合成图像

    此外,HTML5 Canvas还支持更多图像处理功能,如剪切(`clip`)、旋转(`rotate`)、缩放(`scale`)和翻转(`translate`)。通过这些方法,我们可以创造出更复杂、更具创意的图像合成效果。 在实际应用中,可能还...

    HTML5/JavaScript 图像边缘羽化

    HTML5/JavaScript 图像边缘羽化是Web开发中一种高级图像处理技术,它允许开发者在网页上实现图像的柔和过渡效果,通常用于增加图像的视觉吸引力或者使图像与其他元素融合得更加自然。这一技术主要基于HTML5的Canvas ...

    HTML 图像 标记 HTML 图像 标记

    根据给定文件的信息,我们可以提炼出以下几个关于HTML图像标记的关键知识点...通过以上知识点的学习,我们可以灵活地在HTML页面中插入并管理各种图像,同时也能更好地理解如何使用这些图像来增强网页的表现力和功能性。

    基于HTML5的专业级图像处理开源引擎

    "基于HTML5的专业级图像处理开源引擎"是一个专为开发者设计的工具,它利用HTML5的Canvas API和WebGL等技术,实现了类似Photoshop的专业级图像编辑功能。这个开源引擎允许用户在浏览器中进行复杂的图像操作,无需依赖...

    HTML5插入图像案例.pdf

    * 在 HTML5 中,插入图像使用 `&lt;img&gt;` 标签,语法为 `图像 URL"&gt;`。 * `&lt;img&gt;` 标签的 src 属性指定图像的 URL,图像可以来自本地文件夹,也可以来自网络资源。 * 通过设置 `&lt;img&gt;` 标签的 alt 属性,可以为图像添加...

    实验5 HTML5的图像及动画

    实验5 HTML5的图像及动画

    HTML5/JavaScript 图像自动Gamma校正

    HTML5和JavaScript是现代网页开发中的核心技术,它们在图像处理方面提供了强大的能力。"HTML5/JavaScript 图像自动Gamma校正"是一个关于如何利用这两者进行图像色彩校正的主题,特别是针对Gamma值调整的实践应用。...

    Html5图片图像处理JS库

    HTML5图片图像处理JS库是一种利用JavaScript在浏览器端进行图像操作的技术,它极大地扩展了Web开发者在客户端处理图像的能力,无需依赖服务器端的资源。基于HTML5的JS图片图像处理库,如AlloyPhoto,提供了丰富的...

    HTML5设置图像.pdf

    HTML5是现代网页开发的重要标准,它在图像处理方面提供了丰富的功能和优化。本文档主要讲解了如何在HTML5中设置和控制图像的显示,包括调整图像尺寸、添加提示文字、设定为背景以及实现图像的浮动和排列。 1. **...

    domtoimage使用HTML5canvas从DOM节点生成图像

    "domtoimage使用HTML5canvas从DOM节点生成图像" 这个标题提到了一个名为 "domtoimage" 的工具,它利用HTML5的Canvas API将DOM(文档对象模型)中的节点转换为图像。这个过程通常用于网页截图或者在网页中保存和分享...

    使用HTML5API进行前端图像压缩

    HTML5 API提供了强大的图像处理功能,其中包括图像压缩。本文将深入探讨如何利用HTML5 API来实现前端图像压缩,以提高用户体验并优化网站性能。 一、HTML5中的Canvas API HTML5的Canvas元素提供了一个画布,允许...

    基于HTML5标准的Dicom图像显示.pdf

    基于HTML5标准的Dicom图像显示技术具有跨平台、兼容性强、使用简单、快速等优点。该技术可以应用于医疗应用市场,满足移动设备上的Dicom图像显示需求。 五、结论 基于HTML5标准的Dicom图像显示技术是解决移动设备...

Global site tag (gtag.js) - Google Analytics