1.绘制图片

  • 相关api及其参数:ctx.drawImage()
参数 说明
参数一 图片对象
参数二,三 可选,图片裁剪的基点(原图左上角为原点)
参数四,五 可选,图片裁剪区域的宽高(基于原图大小)
参数六,七 画布的绘制起点坐标
参数八,九 可选,被裁剪图片显示出来的宽高(缩放)
  • 注意:前5个参数用来描述要加载的图片,支持图片剪切,默认整张图片

  • 注意:后4个参数用来描述如何绘制(在哪个位置绘制,绘制大小),图片大小支持缩放,默认为原图大小

  • 注意:如果参数2-5已经传值,参数8-9就不能省略,不然会报错

  • 示例1:绘制完整的原图(图片的加载是异步的,所以绘制的图片的时候要在图加载完成后执行)

<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d") //创建图片对象
var image = new Image()
//将图片加载到内存中
image.src = "xbx.jpeg"
//监听图片加载是否完成
image.onload = function(){
//图片已完成加载
ctx.drawImage(image,100,100)
}
</script>

  • 示例2:缩放原图(2-5参数不传,传8-9参数)
ctx.drawImage(image,100,100,160,90)

  • 示例3:剪切图片
//截去了左边的80px
ctx.drawImage(image,80,0,240,180,100,100,240,180)

  • canvas画布的内容可被转换成图片资源
var imgurl = canvas.toDataURL("image/png")
  • 帧动画:动画本身就是由无数帧的图片播放构成的,只要切换图片渲染就可以完成这个效果,为了节省图片资源,可以使用精灵图进行裁剪,以实现不同的图片,至于图片切换实际,可以监听键盘按键事件,根据不同的按键切换绘制的图片帧,切换图片帧时,可使用ctx.clearRect()清除旧的图片,再绘制新的图片

2.坐标转换

  • 相关api:translate()/scale()/rotate()
  • 注意:调用他们会导致整个画布内的元素都会受影响,包括坐标系,直线宽度,字体大小等等

3.偏移 translate()

  • 注意:使用translate()后整个坐标系统也会跟着偏移
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d") //原点偏移
ctx.translate(50,50)
ctx.font = "20px 微软雅黑";
ctx.textBaseline = "top"
ctx.fillText("本来我在左上角",0,0)
</script>

4.缩放 scale()

  • 注意:使用scale()后整个画布都缩放了
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d") //原点偏移
ctx.scale(0.5,0.5)
ctx.font = "40px 微软雅黑";
ctx.textBaseline = "top"
ctx.fillText("本来我在100*100的位置",100,100)
</script>

5.旋转 rotate()

  • 注意:单位 Math.PI
  • 实例:将画布顺时针旋转45度
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d") //原点偏移
ctx.rotate(Math.PI/4)
ctx.font = "20px 微软雅黑";
ctx.textBaseline = "top"
ctx.fillText("本来我在100*100的位置",0,0)
</script>

canvas(八)绘制图片和坐标转换的更多相关文章

  1. 前端使用html2canvas截图,在canvas上绘制图片及保存图片

    1.使用html2canvas 存在的问题: 不同的机型绘制位置不同的问题. 这个主要因为Html动态设置了html的dpr.(dpr可以解决屏幕显示不了1pxborder和无法显示小于12px的文字 ...

  2. 在canvas上面绘制图片--drawImage实例

    在canvas上面绘制图片--drawImage实例 关键点: 1.图片居中 2.其它 <!DOCTYPE html> <html lang="zh-cn"> ...

  3. canvas 2.0 图片绘制

    绘制图片drawImage 2013.02.21 by 十年灯·一条评论 本文属于<html5 Canvas画图系列教程> 这里的绘制图片是指把一张现成的图片,绘制到Canvas上面. 有 ...

  4. Canvas中 drawImage绘制图片不显示

    在学习 html5中的 Canvas.drawImage时写了如下代码: <!doctype html> <html> <head><title>研究& ...

  5. 使用html5 canvas绘制图片

    注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...

  6. Android Canvas使用drawBitmap绘制图片

    1.基本的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float top, ...

  7. android中Canvas使用drawBitmap绘制图片

    1.主要的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置     drawBitmap(Bitmap bitmap, float left, float ...

  8. canvas绘制图片

    canvas保存为data:image扩展功能的实现 [已知]canvas提供了toDataURL的接口,可以方便的将canvas画布转化成base64编码的image.目前支持的最好的是png格式, ...

  9. canvas - drawImage()方法绘制图片不显示的问题

    canvas有个很强大的api是drawImage()(w3c): 他的主要功能就是绘制图片.视频,甚至其他画布等.   问题: 慕名赶来,却一脚踩空,低头一看,地上一个大坑. 事情是这样的,在我看完 ...

  10. openLayers 4 canvas图例绘制,canvas循环添加图片,解决图片闪烁问题

    一.问题来源: 接触Openlayers 一段时间了,最近做了一个农业产业系统,项目中涉及到产业图例,最后考虑用canvas来绘制图例图像.当中带图片的图例移动时,图片会实现闪烁留白情况.闪烁是因为绘 ...

随机推荐

  1. TFC-Pretraining: 基于时间频率一致性对时间序列进行自监督对比预训练《Self-Supervised Contrastive Pre-Training for Time Series via Time-Frequency Consistency》(时间序列、时序表征、时频一致性、对比学习、自监督学习)

    2023年11月10日,今天看一篇论文,现在17:34,说实话,想摆烂休息,不想看,可还是要看,拴Q. 论文:Self-Supervised Contrastive Pre-Training for ...

  2. C++面试题整理 2

    8. C++11新特性又哪些 自动类型推导auto,智能指指针(share_ptr,unique_ptr等),for循环简化,线程相关的(std::thread/std::mutex),空指针null ...

  3. MyBatisPlus——代码生成器

    代码生成器 快速生成各项代码 步骤 创建Generator类,并创建main方法 创建代码生成器 AutoGenerator autoGenerator = new AutoGenerator(); ...

  4. JavaScript——案例-表单验证

    需求       <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. QT与JavaScript之QT6应用程序与JavaScript脚本集成开发:C++应用程序能与JavaScript实现相互调用吗?

    简介 QT6框架中提供了JavaScript引擎类型QJSEngine ,可用于实现 C++应用程序和JavaScript代码之间的相互调用. 目录 什么是 ECMAScript ? JavaScri ...

  6. 图片 电力电网行业IT运维方案

    智能电网背景下,电力.电网企业信息化逐渐渗透到其业务链的各个环节,云计算.物联网.移动互联网等新技术的应用,更驱动信息化与业务创新深度融合.电力.电网企业集团信息系统群逐渐朝着一体化方向发展,信息链越 ...

  7. git 设置代理和取消代理

    1.设置代理 git config --global http.proxy "127.0.0.1:1080" 2.取消代理 git config --global --unset ...

  8. 【Azure Cloud Service】使用Key Vault Secret添加.CER证书到Cloud Service Extended Support中

    问题描述 因为Key Vault的证书上传功能中,只支持pfx格式的证书,而中间证书,根证书不能转换为pfx格式,只能是公钥证书格式 cet 或者 crt,能通过文本工具直接查看base64编码内容. ...

  9. ​Meteor:全栈JavaScript开发框架的先驱

    Meteor 是一个功能强大且易用的全栈 JavaScript 框架,它简化了现代 Web 应用的开发流程,从数据库到用户界面都可以通过一套统一的技术栈来实现.无论你是构建实时应用还是想要一个快速的原 ...

  10. P3571 [POI2014] SUP-Supercomputer 题解

    P3571「POI2014」SUP-Supercomputer 题解 一道 "较" 水的黑题 (可一开始苦思冥想还是不会). 本蒟蒻的第一篇黑题题解,求赞. 题意简化 给定一棵 \ ...