使用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'
            }
          );
        };
      },
相关推荐
&活在当下&1 分钟前
uniapp 选择城市区号索引列表实现
前端·uni-app
阿珊和她的猫5 分钟前
简述 React 的虚拟 DOM 机制
前端·react.js·前端框架
梵得儿SHI6 分钟前
Vue 高级特性:混入(Mixin)使用场景与问题、Vue3 组合式 API 替代方案精讲
前端·javascript·vue.js·组合式api·参数传递·mixin机制·显式调用
qq_336313937 分钟前
javaweb-HTML和CSS(2)
前端·css·html
Sapphire~11 分钟前
【模板】Jinja风格 Ruby风格
前端·后端
冰暮流星14 分钟前
javascript之for-of循环
开发语言·javascript·ecmascript
不绝19115 分钟前
Input/屏幕/Camera/光源/碰撞检测/音频相关
开发语言·javascript·ecmascript
火星数据-Tina15 分钟前
体育平台搭建:如何高效引入赛事直播与比分数据
大数据·前端·网络
醉风塘17 分钟前
完美升级!将ElTree生硬文本提示替换为优雅的ElEmpty组件
javascript·vue.js·elementui
RichardLau_Cx24 分钟前
Google Chrome 浏览器安装「豆包插件」完整教程
前端·chrome·插件·豆包