canvas绘图怎么设置配置并居中
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章给大家分享的是有关canvas绘图怎么设置配置并居中的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。canvas绘图时drawImage,需要绘制的图片大小不同,比例
千家信息网最后更新 2025年01月19日canvas绘图怎么设置配置并居中
这篇文章给大家分享的是有关canvas绘图怎么设置配置并居中的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
canvas绘图时drawImage,需要绘制的图片大小不同,比例各异,所以就需要像html+css布局那样,需要contain和cover来满足不同的需求。
contain
保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。
图片按照contain模式放到固定盒子的矩形内,则需要对图片进行一定的缩放。
原则是:
如果图片宽高不等,使图片的长边能完全显示出来,则原图片高的一边缩放后等于固定盒子对应的一边,等比例求出另外一边,
如果图片宽高相等,则根据固定盒子的宽高来决定缩放后图片的宽高,固定盒子的宽大于高,则缩放后的图片高等于固定盒子的高度,对应求出另外一边即可,反之亦然。
/** * @param {Number} sx 固定盒子的x坐标,sy 固定盒子的y左标 * @param {Number} box_w 固定盒子的宽, box_h 固定盒子的高 * @param {Number} source_w 原图片的宽, source_h 原图片的高 * @return {Object} {drawImage的参数,缩放后图片的x坐标,y坐标,宽和高},对应drawImage(imageResource, dx, dy, dWidth, dHeight) */ function containImg(sx, sy , box_w, box_h, source_w, source_h){ var dx = sx, dy = sy, dWidth = box_w, dHeight = box_h; if(source_w > source_h || (source_w == source_h && box_w < box_h)){ dHeight = source_h*dWidth/source_w; dy = sy + (box_h-dHeight)/2; }else if(source_w < source_h || (source_w == source_h && box_w > box_h)){ dWidth = source_w*dHeight/source_h; dx = sx + (box_w-dWidth)/2; } return{ dx, dy, dWidth, dHeight } } var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.fillStyle = '#e1f0ff'; //固定盒子的位置和大小--图片需要放在这个盒子内 ctx.fillRect(30, 30, 150, 200); var img = new Image(); img.onload = function () { console.log(img.width,img.height); var imgRect = containImg(30,30,150,200,img.width,img.height); console.log('imgRect',imgRect); ctx.drawImage(img, imgRect.dx, imgRect.dy, imgRect.dWidth, imgRect.dHeight); } img.src = "./timg2.jpg"; //注:img预加载模式下,onload应该放在为src赋值的上面,以避免已有缓存的情况下无法触发onload事件从而导致onload中的事件不执行的情况发生
cover
保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。
原理:
按照固定盒子的比例截取图片的部分:
/** * @param {Number} box_w 固定盒子的宽, box_h 固定盒子的高 * @param {Number} source_w 原图片的宽, source_h 原图片的高 * @return {Object} {截取的图片信息},对应drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)参数 */ function coverImg(box_w, box_h, source_w, source_h){ var sx = 0, sy = 0, sWidth = source_w, sHeight = source_h; if(source_w > source_h || (source_w == source_h && box_w < box_h)){ sWidth = box_w*sHeight/box_h; sx = (source_w-sWidth)/2; }else if(source_w < source_h || (source_w == source_h && box_w > box_h)){ sHeight = box_h*sWidth/box_w; sy = (source_h-sHeight)/2; } return{ sx, sy, sWidth, sHeight } } var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.fillStyle = '#e1f0ff'; //固定盒子的位置和大小--图片需要放在这个盒子内 ctx.fillRect(30, 30, 150, 200); var img = new Image(); img.onload = function () { console.log(img.width,img.height); var imgRect = coverImg(150,200,img.width,img.height); console.log('imgRect',imgRect); ctx.drawImage(img, imgRect.sx, imgRect.sy, imgRect.sWidth, imgRect.sHeight, 30, 30, 150, 200); } img.src = "./timg2.jpg"; //注:img预加载模式下,onload应该放在为src赋值的上面,以避免已有缓存的情况下无法触发onload事件从而导致onload中的事件不执行的情况发生
感谢各位的阅读!关于"canvas绘图怎么设置配置并居中"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
图片
盒子
事件
情况
绘图
坐标
大小
模式
配置
不同
也就是
也就是说
位置
内容
参数
方向
更多
比例
篇文章
缓存
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
济宁网络安全展馆
公安网络安全大学生心得体会
数据库在内网 后端在外网
丹东养老认证服务器返回错误
西安邮政储蓄银行软件开发
鹏博网络技术
oracle连接远程数据库
新收入准则解读软件开发
国际性互联网科技展设备
数据库的安全权限设置密码
数据库界面设计工具
北京刷医保软件开发
连接数据库有什么用
360服务器卫士
数据库主从切换 麒麟ha
国家网络安全工作四大要点包括
服务器租赁托管法律风险
备份服务器一般做raid几
VR交友软件开发
软件工程数据库设计人力资源管理
exo设计数据库
郑州软件开发培训学费大概多少
服务器管理器如何分盘
小学校园网络安全教育内容
周鸿祎说网络安全不挣钱
网游服务器的安全和稳定性
数据库中数据类型计算怎么弄
太仓专业网络技术推荐咨询
达梦数据库硬盘配置
工信局网络安全宣传页