使用Fabric创建的canvas画布背景图片,自适应画布宽高

之前的文章写过vue2使用fabric实现简单画图demo,完成批阅功能;但是功能不完善,对于很大的图片就只能显示一部分出来,不符合我们的需求。这就需要改进,对我们设置的背景图进行自适应。

有问题的canvas画布背景

修改后的画布背景就可以自适应了

创建的具体代码请看之前的文章,这里只提供解决办法

js部分,重写了设置背景的方法。

主要是 使用scale在x轴和y轴上进行缩放

scaleX: _this.fabricObj.width / img.width,

scaleY: _this.fabricObj.height / img.height,

复制代码
 setBackgroundImg(imgUrl) {
        // 创建一个新的 Image 对象
        var img = new Image();
        // img.crossOrigin = 'Anonymous'; // 设置允许跨域访问
        img.src = imgUrl;

        // 保存外部环境的引用
        var _this = this;

        // 在图片加载完成后执行操作
        img.onload = function () {
          var aspectRatio = img.width / img.height;
          var newWidth = 750; // 新的宽度为 750
          var newHeight = newWidth / aspectRatio; // 根据宽高比计算新的高度

          // 设置 Canvas 的宽度和高度
          _this.fabricObj.setWidth(newWidth);
          _this.fabricObj.setHeight(newHeight);
          // 将背景图片添加到Canvas中
          _this.fabricObj.setBackgroundImage(
            img.src,
            function () {
              _this.fabricObj.renderAll();
            },
            {
              scaleX: _this.fabricObj.width / img.width,
              scaleY: _this.fabricObj.height / img.height,
              crossOrigin: 'anonymous'
            }
          );
        };
      },
相关推荐
Mike_jia20 小时前
DBdoctor:数据库性能的“AI名医”,诊断效率提升10倍的终极利器
前端
怪可爱的地球人20 小时前
向宇宙发送一枚小可爱
前端
数字元匠_山步20 小时前
一篇笔记彻底搞懂 “脚手架” “框架” “构建工具” 的关系
前端
李剑一20 小时前
前端实现时间轴组件拼接N多个不连续监控视频展示
前端·vue.js
岁月向前20 小时前
iOS UI基础和内存管理相关
前端
Magicman20 小时前
JS筑基(二)-关于this指向
前端
Asort20 小时前
精通React JSX:高级开发者必备的语法规则与逻辑处理技巧
前端·javascript·react.js
Mintopia20 小时前
想摸鱼背单词?我用 Cursor 一个小时开发了一个 Electron 应用
前端·javascript·cursor
JarvanMo20 小时前
Flutter PruneKit - 从你的Flutter代码中干掉那些已经死掉的代码
前端
500佰20 小时前
最近做产品开发,总结出一些通病
前端