`

CanvasPattern对象用法详解

阅读更多

画布中添加背景图案

我们可以使用如下方法来添加背景图案:

createPattern(imageobj, option)

其中imageobj是对应图片对象,option是相关图片属性,可以设置为repeat(缺省值), repeat-x, repeat-y, no-repeat。

 

创建好背景后,我们可以使用类似填充颜色的方法来填充图案,如下:

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML5 CanvasPattern实现图像平铺的入门示例</title>
</head>
<body>

<!-- 添加canvas标签,并加上红色边框以便于在页面上查看 -->
<canvas id="gbcanvas" width="1150" height="300"></canvas>

<script type="text/javascript">
    /*Javascript源代码*/
    var canvas = document.getElementById('gbcanvas'), // 这里通过gbCanvas获取canvas对象
            context = canvas.getContext('2d'); //这里通过canvas获取处理API的上下文context

    //生成背景图案
    var imageobj = new Image();
    imageobj.onload = function(){
        //这里确保图片加载后在执行HTML5画布的相关方法
        var pattern = context.createPattern(imageobj, 'repeat');
        context.rect(0,0, 950, 300);
        context.fillStyle = pattern;
        context.fill();
    }
    //设置背景图案的地址
    imageobj.src = 'http://www.gbtags.com/gb/networks/uploadimg/d72f284c-c729-4de7-ba3e-b93587cb1446.jpg';
</script>
</body>
</html>

 

 

 

 

 

 

CanvasPattern对象是HTML5 Canvas API中用于给指定的图形铺上指定的图像的关键对象,这与CSS中background属性的作用有点类似。CanvasPattern 对象就表示平铺图像所采用的模式(在指定的图形上以何种方式进行平铺)。

CanvasPattern对象的用法非常简单。我们只需要使用CanvasRenderingContext2D对象的 createPattern() 方法创建一个新的 CanvasPattern 对象,并将该对象设为CanvasRenderingContext2D对象的strokeStylefillStyle属性值即可。

下面,我们就来详细了解一下CanvasRenderingContext2D对象的createPattern()方法。

createPattern(image, repetitionStyle)

createPattern()方法用于创建一个表示将图像在当前图形上以什么样的方式进行重复平铺的CanvasPattern对象。参数image指定用于平铺的图像,该参数可以是一个Image对象,也可以是一个Canvas对象。参数repetitionStyle表示图像如何进行重复平铺,可能的值有repeat(在水平和垂直方向上均进行重复平铺,这也是默认值)、repeat-x(只在水平方向上重复平铺)、repeat-y(只在垂直方向上重复平铺)、no-repeat(只铺一次,不进行重复平铺)。

下面,我们就来看一个具体的例子。我们将如下图所示的图像(宽度和高度均为20px),在canvas指定的矩形区域中进行不同方式的平铺,并查看对应的图形效果。

用于平铺的图片:用于平铺的图片(注意:原图片已丢失,此处放置的是一个类似的图片,只是颜色略有差异)。

<!DOCTYPE html>
<html>
<head>
<metacharset="UTF-8">
<title>HTML5 CanvasPattern实现图像平铺的入门示例</title>
</head>
<body>
<!-- 添加canvas标签,并加上红色边框以便于在页面上查看 -->
<canvasid="myCanvas"width="400px"height="300px"style="border:1px solid red;">
您的浏览器不支持canvas标签。
</canvas>
<scripttype="text/javascript">
//获取Canvas对象(画布)
var canvas = document.getElementById("myCanvas");
//简单地检测当前浏览器是否支持Canvas对象,以免在一些不支持html5的浏览器中提示语法错误
if(canvas.getContext){  
    //获取对应的CanvasRenderingContext2D对象(画笔)
    var ctx = canvas.getContext("2d");  
   
    //创建一个表示图片的Image对象
    var img =newImage();
    //指定图片的URL
    img.src ="http://www.365mini.com/static/upload/image/info.png";
    //当图片加载完毕后再设置对应的图像平铺模式并填充矩形
    img.onload =function(){
        //创建CanvasPattern对象,指定上述图片进行水平和垂直方向的重复平铺
        var pattern = ctx.createPattern(img,"repeat");
        ctx.fillStyle = pattern;
        //从坐标点(0,0)开始,绘制并填充宽度为200px、高度为100px的矩形
        ctx.fillRect(0,0,200,100);      
    }
}
</script>
</body>
</html>

 

对应的显示效果如下:

repeat:水平方向和垂直方向均重复平铺repeat:水平方向和垂直方向均重复平铺

 

值得注意的是,如上述代码所示,如果createPattern()方法的image参数值不是当前页面一个已经存在的Image对象或Canvas对象,那么我们需要等待浏览器将图片加载完毕后才能调用createPattern()方法及后续操作,否则将无法正确显示对应的图形。

接着,我们将createPattern()方法的第2个参数repetitionStyle改为其他可能的值并分别查看对应的图形效果。

 

repeat-x:只在水平方向上重复平铺repeat-x:只在水平方向上重复平铺

repeat-y:只在垂直方向上重复平铺repeat-y:只在垂直方向上重复平铺

no-repeat:不进行重复平铺no-repeat:不进行重复平铺

 

此外,有一点尤为需要注意,CanvasPattern对象开始平铺图像的参考起点并不是我们当前绘制图形的左上角,而是整个canvas画布的左上角,确切地说,即canvas的起点坐标(0,0)。在上面的例子中,我们的矩形的起始坐标点也是(0,0),所以看不出有什么区别。现在,我们将矩形的起始坐标点改为(10,10),我们再来看看绘制的图形效果。

<scripttype="text/javascript">
//获取Canvas对象(画布)
var canvas = document.getElementById("myCanvas");
//简单地检测当前浏览器是否支持Canvas对象,以免在一些不支持html5的浏览器中提示语法错误
if(canvas.getContext){
    //获取对应的CanvasRenderingContext2D对象(画笔)
    var ctx = canvas.getContext("2d");
    //创建一个表示图片的Image对象
    var img =newImage();
    //指定图片的URL
    img.src ="http://www.365mini.com/static/upload/image/info.png";
    //当图片加载完毕后再设置对应的图像平铺模式并填充矩形
    img.onload =function(){
        //创建CanvasPattern对象,指定上述图片进行水平和垂直方向的重复平铺
        var pattern = ctx.createPattern(img,"repeat");
        ctx.fillStyle = pattern;
        //从坐标点(10,10)开始,绘制并填充宽度为200px、高度为100px的矩形
        ctx.fillRect(10,10,200,100);
    }
}
</script>

 

对应的显示效果如下:

矩形起点坐标更改后的图像平铺效果矩形起点坐标更改后的图像平铺效果

 

在上面的示例代码中,我们用于平铺的图像没有变、矩形的大小也没有,仅仅只更改了矩形的起点坐标,就出现了上述不同的效果。这就是因为CanvasPattern对象平铺图像的参考起点坐标就是canvas画布的起点坐标。

 

你可以这样理解,我们的图像就是直接平铺在canvas上的,只是默认情况下,这些图像都不可见。当我们绘制图形时,该图形所在区域的图像才会显示出来。你可以参考下面几个例子,以帮助理解。

更改矩形起点为(20,20),repeat更改矩形起点为(20,20),repeat

更改矩形起点为(30,30),repeat-x更改矩形起点为(30,30),repeat-x

绘制一个等边直角三角形,repeat绘制一个等边直角三角形,repeat

注意:到目前为止,FireFox浏览器对该对象的支持存在bug,你所期望的效果可能和实际显示效果不一致。

分享到:
评论

相关推荐

    借助HTML5 Canvas来绘制三角形和矩形等多边形的方法

    此外,Canvas也支持渐变和模式填充,通过创建CanvasGradient或CanvasPattern对象,可以为图形添加平滑的色彩过渡或使用重复的图案填充。 总结起来,HTML5 Canvas 提供了一个强大而灵活的图形绘制平台,使得开发者...

    Canvas2D introduction.pptx

    这里,我们设置了填充颜色为蓝色(`context.fillStyle = 'blue'`),并使用 `fillRect()` 方法绘制了一个矩形,其左上角坐标为 (10, 20),宽高分别为 200 和 100。 #### 三、Canvas2D 规范与实现 Canvas2D 的规范...

    PhD_Thesis_Cristina_Pinneri.pdf

    PhD_Thesis_Cristina_Pinneri

    Git知识学习(尚硅谷)

    Git知识学习(尚硅谷)

    套筒机械加工工艺规程制订设计.rar

    套筒机械加工工艺规程制订设计.rar

    The First Adventures on Differential Geometry 9789811296178.pdf

    The First Adventures on Differential Geometry 9789811296178

    汽车防误踏油门机构的设计.zip

    汽车防误踏油门机构的设计.zip

    汽车离合器设计.zip

    汽车离合器设计.zip

    基于SpringBoot的文学创作社交论坛(源码+数据库+万字文档+ppt)533

    基于SpringBoot的文学创作社交论坛,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 1. **首页:** 浏览社交论坛的主要信息。 2. **火车信息:** 阅读和浏览用户发布的文学创作。 3. **公告资讯:** 查看社交论坛发布的重要通知和公告。 4. **后台管理:** - **首页:** 进行后台管理相关操作。 - **个人中心:** 管理个人信息,查看火车票订购历史等。 - **车票预订管理:** 预订文学创作,选择特定的创作者或主题。 - **车票退票管理:** 处理用户对已预订文学创作的退票请求。 5. **个人中心:** 管理个人信息。 【管理员功能】 1. **首页:** 查看社交论坛整体概况。 2. **个人中心:** 修改密码、管理个人信息。 3. **用户管理:** 审核和管理注册用户的信息。 4. **火车类型管理:** 管理文学创作的分类信息。 5. **火车信息管理:** 监管和管理社交论坛上的文学创作信息。 6. **车票预订管理:** 查看和管理用户的文学创作预订情况。 7. **车票退票管理:** 处理用户对已预订文学创作的退票请求。 8. **系统管理:** - **公告资讯:** 发布、编辑和删除系统的通知和公告。 - **关于我们:** 编辑和更新社交论坛的介绍。 - **系统简介:** 提供社交论坛的简要介绍。 - **轮播图管理:** 管理社交论坛首页的轮播图。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBoot 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上都可以 开发工具:IDEA、Ecplise、Myecplise都可以 数据库

    数控铣床主轴箱设计.zip

    数控铣床主轴箱设计.zip

    某电镀废水工艺流程及平面布置图.zip

    某电镀废水工艺流程及平面布置图.zip

    joblib-0.9.0b4-py2.7.egg

    该资源为joblib-0.9.0b4-py2.7.egg,欢迎下载使用哦!

    价值60元的带会员和后台版的域名防红1.19最新免授权开心版

    管理会员制度渠道,掌管多种服务,黑白名单管理邮箱配置生成提醒发送对接易支付进行交易,订单列表,带有各种短网址功能提供接口对接,实现短网址+防红两不误,可自定义多中转域名,自动识别安全网址各种防红数据后台可显,自定义跳转网站 用户端android-ios 会员制度享受,自定义跳转网站,在线充值,我的生成,在线生成,为你的网址提供保护短网址列表接口文档数据显示,编辑我的生成 防红效果全网 在短网址与防红的前提下,为你的网站提供SEO服务以及腾讯相关网站检测的优化 贴吧+短视频平台+ios+android+pc皆正常 安装:上传源码,访问安装。提示授权时,随意填写 6位数字即可

    joblib-0.9.0b3.tar.gz

    该资源为joblib-0.9.0b3.tar.gz,欢迎下载使用哦!

    实时操作系统毕业设计项目内含说明书.zip

    实时操作系统毕业设计项目内含说明书.zip

    python相关学习资源,python

    python

    塑料瓶自动封口机设计.rar

    塑料瓶自动封口机设计.rar

    CarPlay 系统功能介绍,比较专业的文档,告诉我们开发Carplay的时候需要遵循的规则

    内容概要:本文介绍了苹果公司在WWDC19上发布的CarPlay系统的最新进展,主要包括四个方面的改进:不规则形状显示屏支持、多屏显示支持、动态屏幕尺寸调整以及“嘿,Siri”语音助手集成。不规则形状显示屏支持允许开发者为CarPlay定义交互区域,确保内容适应各种非矩形屏幕。多屏显示支持使车辆可以在多个屏幕上同时展示CarPlay界面,如中心控制台和仪表盘,提供导航、音乐播放等不同内容,并支持独立的夜间模式。动态屏幕尺寸调整功能让CarPlay界面可以实时调整大小,以适应不同的驾驶环境或用户需求。最后,“嘿,Siri”功能让用户可以通过语音唤醒Siri,即使在播放音乐时也能无缝交互,系统内置了持续的回声消除和降噪处理,确保语音识别的准确性。; 适合人群:汽车制造商、软件开发者以及对车载信息系统感兴趣的科技爱好者。; 使用场景及目标:①汽车制造商可以根据新的CarPlay特性优化车内娱乐和导航系统的用户体验;②开发者可以利用这些新特性创建更加丰富的车载应用程序;③科技爱好者可以了解最新的车载技术发展趋势。; 其他说明:文档详细描述了CarPlay系统的技术细节,包括语音活动检测器、关键词检测器、回声消除和降噪等功能的工作原理,以及车辆系统的要求,如始终开启的麦克风输入流处理、连续回声消除和降噪等。更多相关信息可参考苹果开发者网站。

    蓝桥杯第十六届省赛真题!

    内容概要:本文档为第十六届蓝桥杯单片机设计与开发项目省赛的程序设计试题说明,面向大学组。文档详细规定了比赛的基本要求、硬件配置、功能描述、性能要求、输出控制、显示功能、按键功能及初始状态。参赛者需要使用指定的单片机竞赛实训平台,完成环境温度、光强、物体运动状态的检测,并通过数码管、LED指示灯、继电器等实现相应的数据显示、状态指示与控制功能。所有程序需在Keil环境下开发,并按要求提交工程文件。 适合人群:具有单片机编程基础的大专院校学生或相关专业技术人员。 使用场景及目标:①掌握单片机编程技能,熟悉传感器数据采集与处理;②学会通过数码管、LED、继电器等实现人机交互界面的设计与实现;③提高对硬件资源的有效利用能力,确保系统的实时性和稳定性。 阅读建议:此资源旨在帮助参赛者理解比赛规则和技术要求,建议仔细阅读各项功能的具体实现细节,特别注意硬件配置、性能指标以及提交规范的要求。同时,在实际操作中要严格按照文档中的规定进行开发和测试,确保作品符合评分标准。

    液压剪式升降平台(step SolidWorks)设计.rar

    液压剪式升降平台(step SolidWorks)设计.rar

Global site tag (gtag.js) - Google Analytics