提到Canvas,必须好好唠唠它的图像操作能力

news2024/11/15 15:32:40

前情提要

接续一下之前对Canvas的探索。本篇分享一下对图像操作的阅读和研究。

日常开发中,时常遇到对图像的处理的场景。精美的图像做为背景或者场景,相对会吸引人。

Canvas图像API十分强大。可以通过Canvas图像API加载图像数据,进行裁剪、贴图,也可以实现动态的图像合成。

来唠唠Canvas图像API吧。

Canvas图像

定义图像

Image()可以帮助创建一个新的 HTMLImageElement 对象。

// 定义图像
let img = new Image();
// 设置图像的地址
img.src = 'https://p3-passport.byteimg.com/img/user-avatar/c6c1a335a3b48adc43e011dd21bfdc60~100x100.awebp';
// 将图片添加到body元素上
document.body.appendChild(img); 

效果

见证…毫不意外的一张图片。

drawImage()

Canvas提供的drawImage()方法可以将图像数据直接显示到画布上。

划个重点,Canvas提供的这个方法基础、强大且实用,后面很多对图像的操作,都需要借助这个方法完成。

参数

参数名描述
ImageImage对象,画布的图像源。
dx画布上图像左上角X轴坐标。
dy画布上图像左上角Y轴坐标。
dw画布上绘制图像的矩形部分的宽度。
dh画布上绘制图像的矩形部分的高度。
sx画布上开始复制源图像的’源位置’的X轴坐标
sy画布上开始复制源图像的’源位置’的Y轴坐标
sw图像的矩形(裁剪)选择框的宽度。
sh图像的矩形(裁剪)选择框的高度。

实例:图像重叠展示

重叠效果的实现主要是通过使用drawImage()方法,为多个图像设置其在画布上X轴和Y轴坐标的不同值来实现的。

img.addEventListener('load', imghLoadFunc, false);
function imghLoadFunc() {ctx.drawImage(img, 0, 0);ctx.drawImage(img, 30, 30);ctx.drawImage(img, 60, 60);
} 

效果

这个叠加效果挺帅气的,有这手艺不摊煎饼可惜了。

实例:调整图像大小

dw和dh两个参数可以帮助调整图像的尺寸大小,dx和dy可以帮助调整图像在画布上的位置。

img.addEventListener('load', imghLoadFunc, false);
function imghLoadFunc() {ctx.drawImage(img, 0, 0);ctx.drawImage(img, 0, 80, 30, 80);ctx.drawImage(img, 30, 80, 70, 80);
} 

效果

这不是传说中的拼图功能么。原来我也可以实现,这个相当实用,以后可以整点花活了。

实例:图像裁剪

借助sx和sy参数开始复制源图像的位置,sw和sh参数确定最终复制图像的矩形的大小。

img.addEventListener('load', imghLoadFunc, false);
function imghLoadFunc() {ctx.drawImage(img, 10, 10, 80, 60, 30, 30, 60, 60);
} 

效果

图像裁剪的使用场景,最常见的是头像裁剪。

未完待续

今天对Canvas图像功能的梳理就到这里,下篇要开启进阶了。

我喜欢创作,每一幅作品都是我将想象用一只叫做“代码”的画笔,绘制而成。

当我寻找新的技术的时候,不是创意枯竭,而是我需要新的色彩。

而这个循序渐进的学习过程,虽然缓慢,但是积少成多、聚沙成塔。

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu篇---ubuntu安装mysql教程

ubuntu篇---ubuntu安装mysql教程一. 首先卸载掉原来的mysql第一步,依次执行下面的语句第2步 清理残留数据第三步 验证原有主机上是否安装mysql:二. 安装mysql三. 修改密码加粗样式ubuntu安装mysql教程 一. 首先卸载掉原来的mysql 第一步,依…

深入理解蓝牙BLE之“扩展广播”

目录 前言: 4.2版本广播: 5.0版本广播: 实现原理: 格式定义: 广播事件类型: 扩展广播: 周期广播: 广播集: HCI接口定义: 4.2版本: 5.…

正式练习的第一个Python功能:加法计算

我本身有着C/C的功底,最近开始自学python,包括网上找教程,买书看。不确定我这种有其他编程语言经验的再学新的语言算不算零基础,总之书就买的《零基础学Python程序设计》。鉴于自己之前已经看过一段时间,这个程序也就不…

[附源码]Python计算机毕业设计SSM开放实验室管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

微服务框架 SpringCloud微服务架构 10 使用Docker 10.3 容器命令介绍

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构10 使用Docker10.3 容器命令介绍10.3.1 容器相关命令10 使用Docker 10.3 …

一类综合的模糊化自适应滑模控制

目录 前言 1.系统描述 2.控制器设计 3.模糊化设计 3.1构造模糊系统 3.2自适应律设计 4仿真分析 4.1仿真系统 4.2仿真结果 前言 上几篇文章分别介绍了模糊化切换增益(也就是模糊化外界扰动d)、模糊化系统部分的不确定项f、模糊化整个切换项,其原理分别为利…

如何制作gif图片?

文章目录一、下载LICEcap【制作gif的工具】(按步骤安装即可)二、LICEcap的使用录制步骤:三、录制的gif效果展示一、下载LICEcap【制作gif的工具】(按步骤安装即可) LICEcap是一款简洁易用的动画屏幕录制软件&#xff…

HTML CSS大学生期末网页大作业 DW个人网页设计 人物介绍 历史人物岳飞介绍

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

智慧工地技术方案

二、 系统概述 建筑工地是一个安全事故多发的场所。目前,工程建设规模不断扩大,工艺流程纷繁复杂,如何完善现场施工现场管理,控制事故发生频率,保障文明施工一直是施工企业、政府管理部门关注的焦点。尤其随着社会的…

Elasticsearch_第3章_ elasticsearch_进阶

Elasticsearch_第3章_ elasticsearch_进阶 文章目录Elasticsearch_第3章_ elasticsearch_进阶0.学习目标1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结1.3.RestAPI实现聚合1.3.1.API语法1.…

Redis数据结构

一.NoSQL 1.认识NoSQL 关系型数据库:结构化(有很多约束),关联的(数据库会自己维护数据之间的关联,如外键),SQL查询(语法统一),满足事务ACID的特性…

C# Winform 文本面板带滚动条

Winform 中如果需要在一个固定大小的面板中显示一些内容,并且面板能上下拖动,将所有的内容完整的展示,这种需求很常见,下面就演示如何实现的吧 效果: 1.新建一个winform 项目,在界面中拖入一个Panel 将 p…

港科夜闻|香港科技大学校长叶玉如教授,新加坡国立大学曾运雄博士:发现阿尔茨海默病新疗法...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科技大学校长叶玉如教授、新加坡国立大学曾运雄博士:发现阿尔茨海默病新疗法。由中科院院士、香港科技大学校长叶玉如教授,及新加坡国立大学感染、免疫与炎症研究所的曾运雄博士共同领导的团队研…

rxjs pipeable operators(下)

rxjs pipeable operators(下) 这一篇主要就是讲 flattening operators,像其他的 pipeable 一样, flattening operators 内部会 subscribe 每一个传进来的 Observable,并且将其返回一个新的 Observable。不过它可以将 …

VsCode + gdb + gdbserver远程调试arm嵌入式linux C/C++程序

基本流程跟我的另一篇文章《VsCode gdb gdbserver远程调试C程序》一样,不一样的是需要重新编译gdb和交叉编译gdbserver。 一、准备工作 sudo apt install libgmp-dev 如果不安装,编译gdb时可能会报错:configure: error: GMP is missing o…

[附源码]计算机毕业设计springboot疫情管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

如何阅读别人的代码

会读好源码,才能写出好代码 而且除了经常写代码,还要保持习惯看看别人是怎么写的,这里我只引出一个话题就是如何阅读别人的代码 。一个工整的代码就好比欣赏一个漂亮的美女一样让人赏心悦目,百看不厌,一个乱糟糟的代码就不忍直视&…

AAAI 2023| 旷视研究院入选论文亮点解读

近日,国际人工智能顶级会议 AAAI 2023 (Association for the Advancement of Artificial Intelligence)公布了录用结果。本届会议共收到来自全球的 8777 篇论文投稿,其中 1721 篇论文被录用,论文录用率为 19.6%。AAAI …

【LeetCode】1796. 字符串中第二大的数字

题目描述 给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。 混合字符串 由小写英文字母和数字组成。 示例 1: 输入:s “dfa12321afd” 输出:2 解释:…

【网络层】动态路由算法、自治系统AS、IP数据报格式

文章目录路由算法路由表 --------协议自己算出最佳路由---找最少的跳数的路路由算法分类静态路由算法---手动配置---军事网络、小网络---缺点 路由更新慢动态路由算法----路由器之间彼此交换信息-------适合大型网络动态路由算法全局性链路状态 路由算法----------OSPF----所有…