canvas 绘制图片

news/2024/11/18 0:47:34/

前面我们了解了canvas的一些基本使用方法,在canvas中我们还可以在canvas中直接绘制图片,在canvas中绘制图片主要使用到drawImage方法

一:drawImage方法参数有三中情况

1:三个参数

ctx.drawImage(image,dx,dy)

image:需要绘制的img图片

dx,dy:绘制的img图片在canvas中的坐标(x,y)

2:五个参数

ctx.drawImage(image,dx,dy,dw,dh)

image:需要绘制的img图片

dx,dy:绘制的img图片在canvas中的坐标(x,y)

dw,dh:绘制的img图片在canvas中的大小(w,h)宽高

3:9个参数(用于切片),通俗的说就是将图片进行特定裁剪然后放到指定的位置

ctx.drawImage(image,sx, sy, sw, sh, dx, dy, dw, dh)

image:需要绘制的img图片

sx, sy, sw, sh:定义图像源的切片位置和大小

dx, dy, dw, dh:定义切片的目标显示位置和大小

二:在canvas中绘制图片分两种情况

1:有现成的img图片,将img标签中的图片绘制到canvas中

var canvas = document.getElementById("myCanvas");
if (!canvas.getContext) {return '不支持canvas'
}
var ctx=canvas.getContext("2d")
//创建图片
var img = document.querySelector("img");
//绘制图片
ctx.drawImage(img, 0, 0)

2:从零开始创建图片

var canvas = document.getElementById("myCanvas");
if (!canvas.getContext) {return '不支持canvas'
}
var ctx=canvas.getContext("2d")
//创建图片
var img = new Image();   // 创建一个<img>元素
img.onload = function(){ctx.drawImage(img, 0, 0)//绘制图片
}
img.src = 'wj.jpg'; // 设置图片源地址

三:根据上面drawImage参数的三种情况,我们来分别实现,看看效果

1:ctx.drawImage(image,dx,dy):将原始图片绘制到canvas中

var canvas = document.getElementById("myCanvas");
if (!canvas.getContext) {return '不支持canvas'
}
var ctx=canvas.getContext("2d")
//创建图片
var img = new Image();   // 创建一个<img>元素
img.onload = function(){ctx.drawImage(img, 0, 0)//绘制图片
}
img.src = 'wj.jpg'; // 设置图片源地址

 

image.png

2:ctx.drawImage(image,dx,dy,dw,dh):给图片设置大小绘制到canvas中

var canvas = document.getElementById("myCanvas");
if (!canvas.getContext) {return '不支持canvas'
}
var ctx=canvas.getContext("2d")
//创建图片
var img = new Image();   // 创建一个<img>元素
img.onload = function(){ctx.drawImage(img, 0, 0, 50, 50)//绘制图片
}
img.src = 'wj.jpg'; // 设置图片源地址

image.png

image.png

3:ctx.drawImage(image,sx, sy, sw, sh, dx, dy, dw, dh):切片,将图片进行特定裁剪然后放到指定的位置

var canvas = document.getElementById("myCanvas");
if (!canvas.getContext) {return '不支持canvas'
}
var ctx=canvas.getContext("2d")
//创建图片
var img = new Image();   // 创建一个<img>元素
img.onload = function(){ctx.drawImage(img, 0, 0, 200, 200, 10, 10, 200, 250)
}
img.src = 'wj.jpg'; // 设置图片源地址

image.png


http://www.ppmy.cn/news/582736.html

相关文章

【自然语言处理】COLD:中文攻击性言论检测数据集

COLD&#xff1a;A Benchmark for Chinese Offensive Language Detection 文章目录 COLD&#xff1a;A Benchmark for Chinese Offensive Language Detection1 论文出处2 背景2.1 背景介绍2.2 针对问题2.3 创新点 3 数据集构建3.1 数据源3.2 效率改进3.3 数据集分析 4 实验设计…

「缤纷色彩的饼状图」:通过使用matplotlib库绘制饼状图,让读者期待在这个色彩缤纷的图表中探索数据的美丽。

嘿&#xff0c;大家好&#xff01;今天我要带你们探索一个有趣的话题&#xff1a;使用matplotlib库绘制饼状图。虽然这听起来可能有些复杂&#xff0c;但我会用轻松幽默的语言给大家讲解&#xff01;准备好了吗&#xff1f;让我们开始吧&#xff01; 首先&#xff0c;我们需要导…

佩戴舒适度极好的蓝牙耳机推荐,五款佩戴舒适的蓝牙耳机推荐

​说到真无线蓝牙耳机&#xff0c;很多人会问音质表现好不好&#xff0c;佩戴上耳舒适性怎么样&#xff1f;等等问题。面对这些常会问的问题&#xff0c;我总结出来&#xff0c;也整理出来几款质量好、佩戴舒适的蓝牙耳机给大家&#xff0c;来看看有哪些。 一、南卡OE PRO开放…

1417

#include<iostream> using namespace std; int main() {int x,y;cin>>x>>y;int d y/x;cout<<d*5;return 0; }

力扣1713.得到子序列最少的操作次数

题目如下 https://leetcode-cn.com/problems/minimum-operations-to-make-a-subsequence/ 题目解析 简单来看会发现这道题目是求最长公共子序列&#xff0c;但是求最长公共子序列的时间复杂度会很高&#xff0c;其实我们可以将这个问题转化为最长上升子序列的解法。根据tar…

codeforces 1713 problem C Build Permutation(思维构造+数论)

input: 3 3 4 7 output: 1 0 2 0 3 2 1 1 0 2 6 5 4 3 题目大意&#xff1a;给我们一个数n&#xff0c;让我们找出一个0~n-1的全排列&#xff0c;a[0]~a[n-1],0<a[i]<n&#xff0c;并且每个数都满足a[i]i为某个数的平方&#xff0c;让我们输出这个排列&#xff0c…

CF 1713 C. Build Permutation 递归 1200

题意&#xff1a;一个长度为 n 从 0 开始的全排列数组 a&#xff0c;求出一种排列方式使对于所有的 i&#xff0c;ai i 为完全平方数。 思路&#xff1a;倒着从最后一个数开始&#xff0c;最后一个数 i 为 n - 1&#xff0c;所以找到第一个大于等于 n - 1 的完全平方数&#…

LeetCode题解(1713):得到子序列的最少操作次数(Python)

题目&#xff1a;原题链接&#xff08;困难&#xff09; 标签&#xff1a;二分查找、贪心算法 解法时间复杂度空间复杂度执行用时Ans 1 (Python) O ( N l o g N ) O(NlogN) O(NlogN) O ( N ) O(N) O(N)272ms (78.33%)Ans 2 (Python)Ans 3 (Python) 解法一&#xff1a; clas…