当前位置:网站首页>canvas图片操作
canvas图片操作
2022-08-11 09:02:00 【好奇的菜鸟】
素材链接:卡通头像 - Bing

一、drawImage()绘制
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>canvas</title>
</head>
<body>
<div><img src="../img/demo.png" alt=""></img></div>
<div>
<canvas id="myCanvas" width="400" height="400">你的浏览器不支持HTML5</canvas>
</div>
</body>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var image = new Image();
image.src = "../img/demo.png";
image.onload = function () {
//以(10,10)为顶点,绘制图像
ctx.drawImage(image, 10, 10);
//以(110,10)为顶点,绘制宽度110,高度为110图像
ctx.drawImage(image, 110, 10, 110, 110);
//图片从(10,10)剪切宽度50,高度50,显示到(210,10) 宽度150,高度150
ctx.drawImage(image, 10, 10, 50, 50, 210, 10, 150, 150);
}
</script>
</html>

//以(10,10)为顶点,绘制图像
ctx.drawImage(image, 10, 10);
//以(110,10)为顶点,绘制宽度110,高度为110图像
ctx.drawImage(image, 110, 10, 110, 110);
//图片从(10,10)剪切宽度50,高度50,显示到(210,10) 宽度150,高度150
ctx.drawImage(image, 10, 10, 50, 50, 210, 10, 150, 150);

二、getImageData()与putImageData()绘制图片
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>canvas</title>
</head>
<body>
<div><img src="../img/demo.png" alt=""></img></div>
<div>
<canvas id="myCanvas" width="600" height="600">你的浏览器不支持HTML5</canvas>
</div>
</body>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var image = new Image();
image.src = "../img/demo.png";
image.onload = function () {
//以(10,10)为顶点,绘制图像
ctx.drawImage(image, 10, 10);
//开始复制位置(20,20),复制宽度100,复制高度100
var imgData = ctx.getImageData(20, 20, 100, 100);
//将复制图像显示至(300,20)位置
ctx.putImageData(imgData, 300, 20);
//在(400,20)位置显示,图像(20,20)宽度50,高度50
ctx.putImageData(imgData, 400, 20, 20, 20, 50, 50)
}
</script>
</html>

三、createImageData()新建像素
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>canvas</title>
</head>
<body>
<div><img src="../img/demo.png" alt=""></img></div>
<div>
<canvas id="myCanvas" width="600" height="600">你的浏览器不支持HTML5</canvas>
</div>
</body>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var image = new Image();
image.src = "../img/demo.png";
image.onload = function () {
//以(10,10)为顶点,绘制图像
ctx.drawImage(image, 10, 10);
//开始复制位置(20,20),复制宽度100,复制高度100
var imgData = ctx.getImageData(20, 20, 100, 100);
//创建空白imageData,宽度和高度使用imgData的宽度和高度(100,100)
var imageData01 = ctx.createImageData(imgData);
//填充imageData颜色和透明度grba
for (var i = 0; i < imageData01.width * imageData01.height * 4; i += 4) {
imageData01.data[i + 0] = 255;
imageData01.data[i + 1] = 0;
imageData01.data[i + 2] = 0;
imageData01.data[i + 3] = 255;
}
//将复制图像显示至(10, 300)位置
ctx.putImageData(imageData01, 10, 300);
//创建空白imageData
var imageData02 = ctx.createImageData(100,100);
for (var i = 0; i < imageData02.width * imageData02.height * 4; i += 4) {
imageData02.data[i + 0] = 255;
imageData02.data[i + 1] = 0;
imageData02.data[i + 2] = 0;
imageData02.data[i + 3] = 155;
}
//将复制图像显示至(120, 300)位置
ctx.putImageData(imageData02, 120, 300);
}
</script>
</html>

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>canvas</title>
</head>
<body>
<div><img src="../img/demo.png" alt=""></img></div>
<div>
<canvas id="myCanvas" width="600" height="600">你的浏览器不支持HTML5</canvas>
</div>
</body>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var image = new Image();
image.src = "../img/demo.png";
image.onload = function () {
//以(10,10)为顶点,绘制图像
ctx.drawImage(image, 10, 10);
//开始复制位置(20,20),复制宽度100,复制高度100
var imgData = ctx.getImageData(20, 20, 100, 100);
//创建空白imageData,宽度和高度使用imgData的宽度和高度(100,100)
var imageData01 = ctx.createImageData(imgData);
//填充imageData颜色和透明度grba
for (var i = 0; i < imageData01.width * imageData01.height * 4; i += 4) {
imageData01.data[i + 0] = random(0,255);
imageData01.data[i + 1] = random(0,125);
imageData01.data[i + 2] = random(125,255);
imageData01.data[i + 3] = random(0,255);
}
//将复制图像显示至(10, 300)位置
ctx.putImageData(imageData01, 10, 300);
//创建空白imageData
var imageData02 = ctx.createImageData(100,100);
for (var i = 0; i < imageData02.width * imageData02.height * 4; i += 4) {
imageData02.data[i + 0] = random(0,255);
imageData02.data[i + 1] = random(125,255);
imageData02.data[i + 2] = random(0,125);
imageData02.data[i + 3] = random(0,255);
}
//将复制图像显示至(120, 300)位置
ctx.putImageData(imageData02, 120, 300);
}
function random(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
</script>
</html>

边栏推荐
- What should I do if the mysql data query causes the cup to be full because the query time span is too large
- Audio and video + AI, Zhongguancun Kejin helps a bank explore a new development path | Case study
- halcon实例
- OAuth Client默认配置加载
- 程序员是一碗青春饭吗?
- 持续集成/持续部署(2)Jenkins & SonarQube
- 【系统梳理】微服务的注册和发现中心
- For the first time, I suspect that there is a bug in selenium4 because the iframe element is not found?
- C Primer Plus(6) 中文版 第1章 初识C语言 1.7 使用C语言的7个步骤
- Has legal counsel become a tasteless product of law firms?
猜你喜欢

磁盘管理:磁盘结构

Audio and video + AI, Zhongguancun Kejin helps a bank explore a new development path | Case study

Inventorying Four Entry-Level SSL Certificates

SDUT 2877:angry_birds_again_and_again

flex布局回顾

如何通过 IDEA 数据库管理工具连接 TDengine?

企业服务器主机加固现状分析

One network cable to transfer files between two computers

对比学习系列(三)-----SimCLR

基于 VIVADO 的 AM 调制解调(3)仿真验证
随机推荐
idea 方法注释:自定义修改method的return和params,void不显示
海信自助机-HV530刷机教程
Continuous Integration/Continuous Deployment (2) Jenkins & SonarQube
观察表情和面部,会发现他有焦虑和失眠的痕迹
盘点四个入门级SSL证书
picker选择器出现object解决办法
nodejs worker_threads的事件监听问题
关于ts的一些泛型关键字用法
研发了 5 年的时序数据库,到底要解决什么问题?
音视频+AI,中关村科金助力某银行探索发展新路径 | 案例研究
腾讯电子签开发说明
Kali penetration test environment set up
游戏服务器中集群网关的设计
Getting Started with Kotlin Algorithms Calculating Prime Factors
excel将数据按某一列值分组并绘制分组折线图
Nuget找不到包的问题处理
RestTemplate工具类
法律顾问成了律所鸡肋产品了吗?
oracle使用online_catalog收集数据,想看下online_catalog模式修改表字
《价值》读书与投资