微信小程序 canvas 处理图片的缩放移动旋转问题

news2024/12/24 8:25:35

这里使用到了一个插件,canvas-drag,来实现大部分功能的

上效果

直接上代码吧~

wxml

<div class="container">
  <canvas-drag id="canvas-drag" graph="{{graph}}" width="700" height="750" enableUndo="{{true}}"></canvas-drag>
</div>

<view class="btn" bindtap="onAddImage">添加图片</view>
<view class="btn" bindtap="onAddText">添加文字</view>
<view class="btn" bindtap="onExport">导出图片</view>
<view class="btn" bindtap="onChangeColor">改变文字颜色</view>
<view class="btn" bindtap="onChangeBgColor">改变背景颜色</view>
<view class="btn" bindtap="onExportJSON">导出模板</view>
<view class="btn" bindtap="onClearCanvas">清空画布</view>
<view class="btn" bindtap="onUndo">后退</view>

创建了一个由canvas-drag封装过的画布,然后增加了一些按钮

wxss

.btn{
  padding: 10rpx 20rpx;
  float:left;
  margin:10rpx;
  border:solid 1px #dfdfdf;
  border-radius: 10rpx;
}

canvas-drag canvas {
  border: 1px solid black;
}

.container {  
  display: flex;  
  justify-content: center; /* 水平居中 */  
  /* align-items: center; 如果需要垂直居中,也可以添加这个属性   */
  /* height: 100vh; 如果需要垂直居中,可以设置容器的高度为视口高度   */
} 

json

{
  "navigationBarTitleText": "",
  "usingComponents": {
    "canvas-drag": "/static/canvas-drag/index"
  }
}

js

//index.js
import CanvasDrag from '../../static/canvas-drag/canvas-drag';
const utils_storageUtil = require("../../utils/storageUtil.js");
Page({
    data: {
        graph: {},
    },
    /**
     * 添加图片
     */
    onAddImage() {
        wx.chooseImage({
            success: (res) => {
                this.setData({
                    graph: {
                        w: 200,
                        h: 200,
                        type: 'image',
                        url: res.tempFilePaths[0],
                    }
                });
            }
        })
    },

    /**
     * 添加文本
     */
    onAddText() {
        this.setData({
            graph: {
                type: 'text',
                text: 'helloworld',
            }
        });
    },

    /**
     * 导出图片
     */
    onExport() {
        CanvasDrag.export()
            .then((filePath) => {
                console.log(filePath);
                utils_storageUtil.setStorage("image_url",filePath)
                wx.previewImage({
                    urls: [filePath]
                })
            })
            .catch((e) => {
                console.error(e);
            })
    },

    /**
     * 改变文字颜色
     */
    onChangeColor() {
        CanvasDrag.changFontColor('rgb(200,200,200)');
    },

    /**
     * 改变背景颜色
     */
    onChangeBgColor() {
        CanvasDrag.changeBgColor('rgb(200,200,200)');
    },

    /**
     * 导出当前画布为模板
     */
    onExportJSON(){
        CanvasDrag.exportJson()
          .then((imgArr) => {
            console.log(JSON.stringify(imgArr));
        })
          .catch((e) => {
              console.error(e);
          });
    },

     onClearCanvas:function(event){
        let _this = this;
        _this.setData({canvasBg:null});
        CanvasDrag.clearCanvas();
    },

    onUndo:function(event){
        CanvasDrag.undo();
    },

    onSave:function(){
       
    }
});

这里说明一点~CanvasDrag的路径是引入插件的路径,下面的utils_storageUtil是存储功能的,可不加,utils_storageUtil是在导出图片那块儿使用到的,删掉即可

emmmm,忘记给插件地址了~

https://github.com/wxa-component/wxa-comp-canvas-drag

下载下来,将这个文件夹拷到自己的文件夹下即可

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

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

相关文章

页面加载503 Service Temporarily Unavailable异常

最近发现网页刷新经常503&#xff0c;加载卡主&#xff0c;刷新页面就正常了。 研究之后发现是页面需要的js文件等加载失败了。 再研究之后发现是nginx配置的问题。 我之前为了解决一个漏洞检测到目标主机可能存在缓慢的HTTP拒绝服务攻击 把nginx的连接设置了很多限制&#…

JSONpath语法怎么用?

JSONPath 可以看作定位目标对象位置的语言&#xff0c;适用于 JSON 文档。 JSONPath 与 JSON 的 关系相当于 XPath 与 XML 的关系&#xff0c; JSONPath 参照 XPath 的路径表达式&#xff0c;提供了描述 JSON 文档层次结构的表达式&#xff0c;通过表达式对目标…

点云处理实操 点云平面拟合

目录 一、什么是平拟合 二、拟合步骤 三、数学原理 1、平面拟合 2、PCA过程 四、代码 一、什么是平拟合 平面拟合是指在三维空间中找到一个平面,使其尽可能接近给定的点云。最小二乘法是一种常用的拟合方法,通过最小化误差平方和来找到最优的拟合平面。 二、拟合步骤…

【Python】已解决:ERROR: No matching distribution found for JPype

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;ERROR: No matching distribution found for JPype 一、分析问题背景 在Python开发中&#xff0c;有时我们需要使用Java库来扩展功能或实现某些特定任务。JPype…

有手就行,轻松本地部署 Llama、Qwen 大模型,无需 GPU

用 CPU 也能部署私有化大模型&#xff1f; 对&#xff0c;没错&#xff0c;只要你的电脑有个 8G 内存&#xff0c;你就可以轻松部署 Llama、Gemma、Qwen 等多种开源大模型。 非技术人员&#xff0c;安装 Docker、Docker-compose 很费劲&#xff1f; 不用&#xff0c;这些都不…

方法重载与重写的区别

1.方法重载和重写都是实现多态的方式&#xff0c;区别在于重载是编译时多态&#xff0c;重写是运行时多态。 2.重载是在同一个类中&#xff0c;两个方法的方法名相同&#xff0c;参数列表不同&#xff08;参数类型、顺序、个数&#xff09;&#xff0c;与方法返回值无关&#x…

springboot种草好物app-计算机毕业设计源码13151

摘要 随着电子商务的快速发展和智能手机的普及&#xff0c;越来越多的用户选择通过移动应用程序进行商品浏览、购买和分享体验。种草好物App作为一个专注于商品推荐和购物体验的平台&#xff0c;具有广泛的应用前景和商业价值。本研究旨在构建一个功能丰富、性能稳定的种草好物…

(vue)el-tabs选中最后一项后更新数据后无法展开

(vue)el-tabs选中最后一项后更新数据后无法展开 效果&#xff1a; 原因&#xff1a;选中时绑定的值在数据更新后找不到 思路&#xff1a;更新数据时把选中的v-model的属性赋为初始值 写法&#xff1a; <el-form-item label"字段选择"><el-tabsv-model&qu…

【计算机网络】传输层(作业)

1、OSI参考模型中&#xff0c;提供端到端的透明数据传输服务、差错控制和流量控制的层是&#xff08;C&#xff09;。 A. 物理层B. 网络层C. 运输层D. 会话层 2、运输层为&#xff08;B&#xff09;之间提供逻辑通信。 A. 主机B. 进程C. 路由器D. 操作系统 3、运输层面向连接…

【面试系列】技术支持工程师高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

JavaScript实现时钟计时

会动的时钟 1.目标 2.分析 1.最开始页面不显示时间&#xff0c;有两个按钮 开始 暂停。开始按钮是可以点击的&#xff0c;暂停按钮不能点击 2.当点击开始按钮后&#xff0c;设置开始按钮不可用&#xff0c;暂停按钮可用。然后将当前系统时间放到按钮上面。每隔1秒中更新一下…

国产操作系统麒麟v10、UOS在线打开excel文件并动态赋值

在实际的开发过程中&#xff0c;经常会遇到数据库中的数据填充到excel生成一份正式文件的功能&#xff0c;PageOffice客户端控件支持在线预览Excel文件时&#xff0c;通过Workbook对象来实现对Excel文件的数据填充功能&#xff0c;如果只是简单的填充一下数据&#xff0c;那么通…

通过容器启动QAnything知识库问答系统

QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统&#xff0c;可断网安装使用。目前已支持格式&#xff1a;PDF(pdf)&#xff0c;Word(docx)&#xff0c;PPT(pptx)&#xff0c;XLS(xlsx)&#xff0c;Markdown(md)&…

洛必达法则在Android应用程序中的应用

洛必达法则在Android应用程序中的应用 前言 在高等数学中,洛必达法则(L’Hpital’s Rule)是一个用于计算未定式极限的有力工具。洛必达法则为我们提供了一种简便的方法,通过求导数来处理一些复杂的极限问题。在Android开发中,尽管我们通常不会直接遇到需要应用洛必达法则…

第二届重庆国际渔业博览会

The 2th Chongqing International Fisheries & Seafood Expo 时间&#xff1a;2024年10月25-27日 地点&#xff1a;重庆国际博览中心 同期举办&#xff1a;第十六届中国(重庆)火锅美食文化节暨第九届中国(重庆)国际火锅产业博览会 展会规模&#xff1a; 展出…

【C++知识点总结全系列 (06)】:STL六大组件详细介绍与总结(配置器、容器、迭代器、适配器、算法、仿函数)

STL六大组件目录 前言1、配置器(1)What(2)Why(3)HowA.调用new和delete实现内存分配与销毁B.STL Allocator (4)allocator类A.WhatB.HowC.allocator的算法 2、容器(1)What(2)Which&#xff08;有哪些容器&#xff09;(3)序列容器&#xff08;顺序容器&#xff09;A.WhichB.array&…

Unreal Engine@Jetson Orin Nano尚不支持

Unreal EngineJetson Orin Nano尚不支持 1. 源由2. Unreal Engine介绍3. 问题4. 编译方法5. 补充 1. 源由 最近在看SC-Explorer方面的内容&#xff0c;在模拟方面采用了Unreal Engine。 本打算跑下模拟&#xff0c;因此打算在JetsonOrin的板子上试试看。 2. Unreal Engine介绍…

【Python】已解决:urllib.error.HTTPError: HTTP Error 403: Forbidden

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;urllib.error.HTTPError: HTTP Error 403: Forbidden 一、分析问题背景 在使用Python的urllib库中的urlopen或urlretrieve函数下载文件时&#xff0c;有时会遇到…

SAP 物料状态简介

在物料主数据中有个物料状态的栏位&#xff0c;这个栏位的作用就在于对涉及到相应物料主数据的各种事务进行不同形式的限制&#xff0c;从而达到对物料的用途进行管控的作用。在实际业务中&#xff0c;尤其是涉及到物料的生命周期管理时&#xff0c;当某个物料已经被禁用的时候…

报表-显示图片(logo、签名、签章等)

1、数据源 字段里面存图片url或base64 比如&#xff1a;https://img2.baidu.com/it/u99450198,2193994199&fm253 as img1 或data:image/png;base64&#xff0c;因为base64体积大&#xff0c;适用于图片尺寸小&#xff0c;并且数量小的情况 2、报表设计 使用ShowImage方…