`
guoyiqi
  • 浏览: 1002691 次
社区版块
存档分类
最新评论

在canvas中插入图片

 
阅读更多

在canvas中显示图片非常简单。可以通过修正层为图片添加印章、拉伸图片或者修改图片等,并且图片通常会成为canvas上的焦点。用HTML5 Canvas API内置的几个简单命令可以轻松地为canvas添加图片内容。

不过,图片增加了canvas操作的复杂度:必须等到图片完全加载后才能对其进行操作。浏览器通常会在页面脚本执行的同时异步加载图片。如果试图在图片未完全加载之前就将其呈现到canvas上,那么canvas将不会显示任何图片。因此,开发人员要特别注意,在呈现之前,应确保图片已经加载完毕。

为保证在呈现之前图片已完全加载,我们提供了回调,即仅当图像加载完成时才执行后续代码。

代码加载图像

// 加载图片bark.jpg 

var bark = new Image(); 

bark.src = "bark.jpg";   // 图片加载完成后,将其显示在canvas上 

bark.onload = function () {    drawTrails();  }

 

从上面的代码中可以看到,我们为bark.jpg图片添加了onload处理函数,以保证仅在图像加载完成时才调用主drawTrails函数。这样做可以保证后续的调用能够把图片正常显示出来。

代码在canvas上显示图像

// 用背景图案填充矩形 

context.drawImage(bark, -5, -50, 10, 50);

在这段代码里注意,在drawImage函数中,除了图片本身外,还指定了x、y、width和height参数。这些参数会对贴图进行调整以适应预定的10×50像素区域。我们还可以把原图的尺寸传进来,以便在裁切区域内对图片进行更多控制。

Canvas标记很多年前就被当作一个新的HTML标记成员加入到了HTML5标准中。在此之前,人们要想实现动态的网页应用,只能借助于第三方的插件,比如Flash或Java,而引入了Canvas标记后,人们直接打通了通往神奇的动态应用网页的大门。本教程内容只覆盖了一小部分、但却是非常重要的canvas标记的应用功能——图像显示和处理。

 

图像来源

最常见的在canvas上画图的方法是使用Javascript Image对象。所支持的来源图片格式依赖于浏览器的支持,然而,一些典型的图片格式(png,jpg,gif等)基本上都没有问题。

图片可以从DOM中已经加载的元素中抓取,也可以按需即时创建。

 

// 抓取页面上已有的图片。
var myImage = document.getElementById(‘myimageid’);// 或创建一个新图片。
myImage = new Image();
myImage.src = ‘image.png’;

大多数支持canvas标记的浏览器的当前版本中,当图片还没有加载完成时,如果你要去画它,结果是什么事情都不会发生。也就是说,如果你想画一个图片,你需要等它完全加载。你可以使用图片对象的onload函数来进行判断。

// Create an image.
myImage = new Image();
myImage.onload = function() {
// Draw image.
}
myImage.src = ‘image.png’;

在下面的所有例子中,我们的图片源将会使用这个256×256尺寸的大猩猩。

大猩猩图片源

基本绘画

在最基本的画图操作中,你需要的只是希望图像出现处的位置(x和y坐标)。图像的位置是相对于其左上角来判断的。使用这种方法,图像可以简单的以其原尺寸被画在画布上。

drawImage(image, x, y)
var canvas = document.getElementById(‘myCanvas’);
var ctx = canvas.getContext(’2d’);ctx.drawImage(myImage, 50, 50);
ctx.drawImage(myImage, 125, 125);
ctx.drawImage(myImage, 210, 210);
基本画布绘图输出

缩放及调整尺寸

改变图像的尺寸,你需要使用重载的drawImage函数,提供给它希望的宽度和高度参数。

drawImage(image, x, y, width, height)
var canvas = document.getElementById(‘myCanvas’);
var ctx = canvas.getContext(’2d’);ctx.drawImage(myImage, 50, 50, 100, 100);
ctx.drawImage(myImage, 125, 125, 200, 50);
ctx.drawImage(myImage, 210, 210, 500, 500);

这个例子演示了如何画一个比原图小的图像,一个不同长宽比的图像和一个比原图大的图像的方法。

画布裁剪图像

图像裁剪

最后一个drawImage方法的功用是对图像进行裁剪。

drawImage(image,
sourceX,
sourceY,
sourceWidth,
sourceHeight,
destX,
destY,
destWidth,
destHeight)

参数很多,但基本上你可以把它想成从原图中取出一个矩形区域,然后把它画到画布上目标区域里。

画布裁剪例子
var canvas = document.getElementById(‘myCanvas’);
var ctx = canvas.getContext(’2d’);ctx.drawImage(myImage, 0, 0, 50, 50, 25, 25, 100, 100);
ctx.drawImage(myImage, 125, 125, 100, 100, 125, 125, 150, 150);
ctx.drawImage(myImage, 80, 80, 100, 100, 250, 250, 220, 220);
画布裁剪

这些就是HTML5中的canvas(画布)标记里进行绘图和处理图像的基本操作。绘图只是canvas能提供的功能之一,将来我们会发布更多的关于这方面的教程,会介绍关于这个标记的更多的特征和功能。如果你有任何的问题和想法,请在下面评论的写出来。

分享到:
评论

相关推荐

    详解canvas drawImage()方法绘制图片不显示的问题

    另一种方法是在HTML中插入图片标签,并设置为不显示,然后再通过JavaScript获取这个元素: ```html <img src="./images/background.jpg" id="imgs" style="display:none"></img> ``` ```javascript var bgImg = ...

    canvas 原位置旋转图片

    首先,我们需要创建一个Canvas元素并在HTML中插入它: ```html <!DOCTYPE html> <title>Canvas 原位置旋转图片 <canvas id="myCanvas" width="400" height="400"></canvas> <script src="index.js"></...

    android canvas 画图

    在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具,它是`android.graphics.Canvas`类的实例。本篇文章将深入探讨如何使用Android Canvas进行图形绘制,包括基本概念、常用方法以及实际应用示例。 Canvas...

    vue之canvas拖动元素

    vue之canvas拖动元素 支持选中,置顶,支持以鼠标点前点拖动

    canvas 移动端画板批注pdf预览

    例如,可以在`handleMove`函数中根据当前触摸点和起始点创建线段,或者在`handleStart`和`handleEnd`中插入文本。 6. **保存批注** 由于Canvas上的修改是临时的,若要持久化批注,需要在每次修改后导出Canvas为...

    根据DOM将html转为canvas图片格式

    将Canvas转换为base64编码的图片,可以方便地在浏览器中显示或通过网络传输。 5. 兼容性问题: 描述中提到,这个功能需要IE9以上浏览器或Firefox、Chrome等现代浏览器支持。这是因为HTML5的Canvas和Data URL规范在...

    在EditText中插入图片

    如果要实现用户在`EditText`中插入图片的功能,就需要进行一些自定义开发。这个话题涉及到Android UI设计、自定义View以及图像处理等多个方面。下面我们将详细探讨如何在`EditText`中插入图片。 首先,我们需要创建...

    带你使用canvas制作马赛克&canvas飞鸟动画&小球动画

    文章目录canvas制作马赛克&飞鸟动画&小球拖拽动画一、了解单像素操作1、在canvas中的像素操作2、得到场景像素数据3、ImageData对象4、在场景中写入像素数据5、创建一个ImageData对象二、canvas使用图片1、在canvas中...

    基于C#开发的图像绘制、Canvas绘图及图片处理应用开发

    对于插入图片,可以使用Image控件,并设置其Source属性为BitmapImage对象。 6. **图像处理**:在C#中,我们可以利用System.Drawing命名空间进行图像处理。例如,暗角、降低亮度、灰度、浮雕、马赛克和锯齿效果,...

    完整版《HTML5高级程序设计》2

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 Canvas变换 42 2.2.14 Canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 Canvas的安全机制 48 2.3 使用...

    完整版《HTML5高级程序设计》4

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 Canvas变换 42 2.2.14 Canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 Canvas的安全机制 48 2.3 使用...

    完整版《HTML5高级程序设计》5

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 Canvas变换 42 2.2.14 Canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 Canvas的安全机制 48 2.3 使用...

    完整版《HTML5高级程序设计》3

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 Canvas变换 42 2.2.14 Canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 Canvas的安全机制 48 2.3 使用...

    HTML5高级程序设计

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 canvas变换 42 2.2.14 canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 canvas的安全机制 48 ...

    HTML5高级程序设计.part5

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 Canvas变换 42 2.2.14 Canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 Canvas的安全机制 48 ...

    HTML5高级程序设计.part4

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 Canvas变换 42 2.2.14 Canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 Canvas的安全机制 48 ...

    HTML5高级程序设计.part1

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 Canvas变换 42 2.2.14 Canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 Canvas的安全机制 48 ...

    HTML5高级程序设计.part2

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 Canvas变换 42 2.2.14 Canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 Canvas的安全机制 48 ...

    HTML5高级程序设计.part3

    2.2.9 在canvas中插入图片 36 2.2.10 渐变 37 2.2.11 背景图 39 2.2.12 缩放canvas对象 41 2.2.13 Canvas变换 42 2.2.14 Canvas文本 43 2.2.15 应用阴影 45 2.2.16 像素数据 46 2.2.17 Canvas的安全机制 48 ...

    HTML5程序设计(第2版).[荷]Peter Lubbers(带详细书签).pdf

    2.2.9 在canvas中插入图片 37 2.2.10 渐变 38 2.2.11 背景图 40 2.2.12 缩放canvas对象 42 2.2.13 Canvas变换 43 2.2.14 Canvas文本 45 2.2.15 应用阴影 46 2.2.16 像素数据 48 2.2.17 Canvas的安全机制 50...

Global site tag (gtag.js) - Google Analytics