当前位置:网站首页>《canvas》之第6章 图片操作
《canvas》之第6章 图片操作
2022-06-29 13:55:00 【yxqq378287007】
《canvas》之第6章 图片操作
第6章 图片操作
6.1 图片操作简介
将图片导入canvas进行平铺、切割、像素处理等操作。
6.2 绘制图片
drawImage()方法将图片显示出来。
6.2.1 drawImage(image, dx, dy)
image,页面中img元素,或者JavaScript创建的Image对象,或者另一个canvas对象(document.createElement(“canvas”))。
dx,dy,左上角横纵坐标。
JavaScript创建Image对象
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8"/>
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); //创建image对象 var image = new Image(); image.src = "images/princess.png"; //图片载入完全后,才能开始绘制图片 image.onload = function () {
cxt.drawImage(image, 40, 20); } } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
- 页面中img元素
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<style type="text/css"> /*隐藏HTML中的img元素*/ #pic {
display: none; } </style>
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); var image = document.getElementById("pic"); cxt.drawImage(image, 40, 20); } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
<img id="pic" src="images/princess.png" alt="" />
</body>
</html>
6.2.2 drawImage(image, dx, dy, dw, dh)
dw,dh定义图片的大小,会进行缩放。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); var image = new Image(); image.src = "images/princess.png"; image.onload = function () {
cxt.drawImage(image, 40, 20, 120+60, 60); } } </script>
</head>
<body>
<canvas id="canvas" width="400" height="300" style="border:1px dashed gray;"></canvas>
</body>
</html>
6.2.3 drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)
将源图片sx,sy,sw,sh部分裁剪后,缩放到canvas的dx,dy,dw,dh处显示。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); var image = new Image(); image.src = "images/princess.png"; image.onload = function () {
cxt.drawImage(image, 0, 0, 80, 80, 40, 20, 80, 80); } } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
6.3 平铺图片
var pattern = cxt.createPattern(image, "type");
cxt.fillStyle = pattern;
cxt.fillRect();
type取值
| 参数值 | 说明 |
|---|---|
| repeat | 水平垂直方向平铺,默认 |
| repeat-x | 水平方向平铺 |
| repeat-y | 垂直方向平铺 |
| no-repeat | 只显示一次,不平铺 |
- 平铺图片
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); var myImg = new Image(); myImg.src = "images/flower.png"; myImg.onload = function () {
var pattern = cxt.createPattern(myImg, "repeat"); cxt.fillStyle = pattern; cxt.fillRect(0, 0, cnv.width, cnv.height); } } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
- 平铺canvas
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); //创建canvas元素 var bgCanvas = document.createElement("canvas"); bgCanvas.width = 20; bgCanvas.height = 20; //在新创建的canvas中画一个圆 var bgCxt = bgCanvas.getContext("2d"); bgCxt.beginPath(); bgCxt.arc(10, 10, 10, 0, 360 * Math.PI / 180, true); bgCxt.closePath(); bgCxt.fillStyle = "HotPink"; bgCxt.fill(); //平铺canvas var pattern = cxt.createPattern(bgCanvas, "repeat-x"); cxt.fillStyle = pattern; cxt.fillRect(0, 0, 200, 200); } </script>
</head>
<body>
<canvas id="canvas" width="200" height="160" style="border:1px dashed gray;"></canvas>
</body>
</html>
6.4 切割图片
cxt.clip();
clip()方法切割图片步骤:
- 绘制基本图形。
- 使用clip()方法。
- 绘制图片。
- 切割圆形
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); //第1步,绘制基本图形,用来切割 cxt.beginPath(); cxt.arc(70, 70, 50, 0, 360 * Math.PI / 180, true); cxt.closePath(); cxt.stroke(); //第2步,使用clip()方法,使得切割区域为上面绘制的基本图形 cxt.clip(); //第3步,绘制一张图片 var image = new Image(); image.src = "images/princess.png"; image.onload = function () {
cxt.drawImage(image, 10, 20); } } </script>
</head>
<body>
<canvas id="canvas" width="200" height="160" style="border:1px dashed gray;"></canvas>
</body>
</html>
- 切割三角形
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); //第1步,绘制基本图形,用来切割 cxt.moveTo(20, 70); cxt.lineTo(120, 20); cxt.lineTo(120, 70); cxt.lineTo(20, 70); cxt.stroke(); //第2步,使用clip()方法,使得切割区域为上面绘制的基本图形 cxt.clip(); //第3步,绘制一张图片 var image = new Image(); image.src = "images/princess.png"; image.onload = function () {
cxt.drawImage(image, 10, 20); } } </script>
</head>
<body>
<canvas id="canvas" width="200" height="160" style="border:1px dashed gray;"></canvas>
</body>
</html>
6.5 深入图片操作
图片结合文字或图形,实现特殊效果。
- 图片结合文字
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); //创建image对象 var image = new Image(); image.src = "images/princess.png"; image.onload = function () {
var text = "绿叶学习网"; cxt.font = "bold 22px 微软雅黑"; var pattern = cxt.createPattern(image, "no-repeat"); cxt.fillStyle = pattern; cxt.fillText(text, 10, 50); } } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
- 图片结合图形
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); //创建image对象 var image = new Image(); image.src = "images/princess.png"; image.onload = function () {
cxt.beginPath(); cxt.arc(50, 50, 50, 0, 360 * Math.PI / 180, false); cxt.closePath(); var pattern = cxt.createPattern(image, "no-repeat"); cxt.fillStyle = pattern; cxt.fill(); } } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
边栏推荐
- 传输层 选择性确认 SACK
- 关于MongoDB报错:connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
- 中康控股开启招股:拟募资净额3.95亿港元,预计7月12日上市
- Redis的数据过期清除策略 与 内存淘汰策略
- Installation and removal of cover for CPU protection on desktop motherboard
- STM32 watchdog study
- 【置顶】博客使用须知,公告板,留言板,关于博主
- 【烹饪记录】--- 酸辣白菜
- 超 Nice 的表格响应式布局小技巧
- Application of ansvc reactive power compensation device in a shopping mall in Hebei
猜你喜欢
随机推荐
微信小程序:云开发表白墙微信小程序源码下载免服务器和域名支持流量主收益
Shell——文本处理命令
【VEUX开发者工具的使用-getters使用】
Why does ETL often become ELT or even let?
goby如何导出扫描结果
靠代理,靠买断,国产端游的蛮荒时代等待下一个《永劫无间》
[high concurrency] 28000 words' summary of callable and future interview knowledge points. After reading it, I went directly to ByteDance. Forgive me for being a little drifting (middle)
布隆过滤器Bloom Filter简介
Uncover the practice of Baidu intelligent test in the field of automatic test execution
redis 分片集群搭建与使用教程
Unity 关于Destroy 和 OnDestroy失效(延迟)的问题
By proxy, by buyout, the wild era of domestic end-to-end travel is waiting for the next "eternal robbery"
【烹饪记录】--- 酸辣白菜
Follow me study hcie big data mining Chapter 1 Introduction to data mining module 2
golang6 反射
Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级
微信小程序:全新独家云开发微群人脉
【jenkins】pipeline控制多job顺序执行,进行定时持续集成
Redis的五种数据结构的底层实现原理
Thinkpad VMware 安装虚拟机出现此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态(问题解决方法)









