小程序canvasToTempFilePath获取的图片地址在真机不显示???

2023-11-08

小程序canvasToTempFilePath获取的图片地址在真机不显示???


wx.canvasToTempFilePath把当前画布指定区域的内容导出生成指定大小的图片。但是直接在真机使用生成的图片地址时发现图片无法显示,这是为啥子呢???请看下面的图片。

开发工具测试图:

真机测试图:

从上面的两个图可以发现在真机上是http://tmp/...类型的图片,在真机上是wxfile://tmp/...类型的图片,所以无法显示。那么如果要直接使用这个图片该咋办呢???

重点来了!!!

使用wx.canvasGetImageData获取 canvas 区域隐含的像素数据。然后将获取的像素数据通过wx.arrayBufferToBase64 转成base64就可以直接在真机上使用了,各位小伙伴可以参照下面的代码实现哦。

<view class="container">
  <canvas style="width: 300px; height: 200px;" class="myCanvas" canvas-id="firstCanvas"></canvas>
  <text class="text">{{img}}</text>
  <!-- 如果要在真机打印或者在text中显示canvasToTempFilePath获取到的地址请注释掉下面这一句,不然你啥都看不到 -->
  <image class="img" src="{{img}}"></image>
</view>

注意!!:必须有UPNG.js点我获取UPNG.js

//index.js
//获取应用实例
var upng = require('../../utils/UPNG.js');
const app = getApp();

Page({
  data: {
    img:''
  },

  onLoad: function() {

  },
  canvasIdErrorCallback: function(e) {
    console.error(e.detail.errMsg)
  },
  onReady: function(e) {
    // 使用 wx.createContext 获取绘图上下文 context
    var context = wx.createCanvasContext('firstCanvas');
    const platform = wx.getSystemInfoSync().platform;
    const that=this;
    context.setStrokeStyle("#333333");
    context.setFillStyle("#FFFF00");

    //  绘制大圆脸
    context.moveTo(210, 100);
    context.arc(150, 100, 60, 0, 2 * Math.PI, true);
    context.fill();

    // 绘制嘴巴
    context.moveTo(190, 100);
    context.arc(150, 100, 40, 0, Math.PI, false);
    context.stroke();

    // 绘制左眼
    context.moveTo(125, 80);
    context.arc(120, 80, 5, 0, 2 * Math.PI, true);
    context.stroke();

    // 绘制右眼
    context.moveTo(185, 80);
    context.arc(180, 80, 5, 0, 2 * Math.PI, true);
    context.stroke();

    context.draw();

    setTimeout(function(){
      wx.canvasGetImageData({
        canvasId: 'firstCanvas',
        x: 0,
        y: 0,
        width: 250,
        height: 250,
        success (res) {
          // console.log(res)
          let pngData = upng.encode([res.data.buffer], res.width, res.height);
          let bs64 = wx.arrayBufferToBase64(pngData);
          that.setData({
            img: 'data:image/jgp;base64,' + bs64
          }, () => {
            console.log(that.data.img)
          })
          // console.log(bs64)
        }
      })
      // wx.canvasToTempFilePath({
      //   canvasId:'firstCanvas',
      //   success(res){
      //     console.log(res.tempFilePath)
      //     that.setData({
      //       img: res.tempFilePath
      //     },()=>{
      //       console.log(res.tempFilePath)
      //     })
      //   }
      // })
    })
  }
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序canvasToTempFilePath获取的图片地址在真机不显示??? 的相关文章

  • 三十六计之混战计

    三十六计的第四篇 共六计 釜底抽薪 混水摸鱼 金蝉脱壳 关门捉贼 远交近攻和假途伐虢 此篇计谋适合于敌友不分 军阀混战时使用 第十九计 釜底抽薪 不敌其力 而消其势 兑下乾上之象 不敌其力 敌 动词 攻打 力 最坚强的部位 而消其势 势 气
  • python接口自动化之DDT数据驱动测试

    一 简单介绍 DDT Date Driver Test 所谓数据驱动测试 简单来说就是由数据的改变从而驱动自动化测试的执行 最终引起测试结果的改变 通过使用数据驱动测试的方法 可以在需要验证多组数据测试场景中 使用外部数据源实现对输入输出与

随机推荐

  • 04 openEuler UKUI 桌面环境的安装和使用

    04 openEuler UKUI 桌面环境的安装和使用 文章目录 04 openEuler UKUI 桌面环境的安装和使用 4 1 UKUI简介 4 2 UKUI安装方法 4 2 1 更新软件源 4 2 2 安装UKUI 4 2 3 设置
  • CMT2380F32模块开发15-SPI例程

    这篇文章基本就是水一篇 因为例程需要操作铁电存储器FM25640 我的开发板上没有这个 我也没有买这个芯片 这个芯片也不便宜 10元左右 所以这篇就讲讲原理 简单讲讲函数吧 SPI 接口是工作于全双工模式下的同步串行数据通信接口 使用4个引
  • matlab中用于小数取整的函数的用法

    matlab中小数取整的函数大约有四个 floor ceil round fix 若 A 2 0 1 9 1 55 1 45 1 1 1 0 1 1 1 45 1 55 1 9 2 0 floor 朝负无穷方向靠近最近的整数 floor A
  • html页面通过id在页面内跳转,HTML跳转到页面指定位置的几种方法

    前言 有时候 我们想阅读页面中某段精彩的内容 但由于页面太长 用户需要自己滚动页面 查找起来非常麻烦 很容易让人失去继续往下阅读的兴趣 这样体验非常不好 所以我们可以想办法 实现点击某段文字或者图片跳转到页面指定位置 方便用户的阅读 一 纯
  • Python打开读文件:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xed in position 7014: invalid conti

    1 问题 Python用open 打开文件 读取其中内容时 报错说编码错误 utf 8 编码不能给字节0xed编码 feed LM input feed file data raw 21000101 204243 txt Traceback
  • Electron 开发环境注意项、踩坑补坑记录

    Electron Bug 解决 1 package json里的lib参数删除 2 项目目录不允许有中文 否则不能下载打包依赖 导致无法打包 3 每次打包软件前都可能缺失依赖包 需要手动在package json文件里的dependenci
  • ubuntu或者linux下卸载和安装多个jdk版本,1.6,1.7和1.8版本

    今天我教大家在ubuntu下安装多个jdk 我的系统是ubuntu 14 04 64位的 所以我下的的都是适合我的系统的 大家可以根据自己的系统从下面的页面中选择下载适合自己系统的jdk版本 jdk1 6 http www oracle c
  • 鉴源论坛 · 观模丨基于应用程序编程接口(API)的自动化测试(上)

    作者 黄杉 华东师范大学软件工程学院博士 苏亭 华东师范大学软件工程学院教授 版块 鉴源论坛 观模 社群 添加微信号 TICPShanghai 加入 上海控安51fusa安全社区 01 应用程序编程接口 API 应用程序编程接口 英文全称为
  • React Native_React Native组件(ListView&FlatList&SectionList)

    ListView 不分组Demo heros json image 1 jpg title 有关斯维因的最早记载出现在诺克萨斯养老院一名医生的笔记上 据载 斯维因一瘸一拐地走进病房 没有叫喊也没有抱怨 他的右腿被折成两段 骨头破皮而出 他的
  • Android开源框架之Glide

    这个图片加载框架功能比较强大 相比起其他框架大多数开发者使用该框架加载图片 简介 1 使用简单 2 可配置度高 自适应程度高 3 支持常见图片格式 Jpg png gif webp 4 支持多种数据源 网络 本地 资源 Assets 等 5
  • 自定义键盘KeyboardView如何添加点击音效

    前段时间通过继承KeyboardView做了个自定义键盘 后来测试发现在打开触摸按键音时没有按键音效果 经过多番尝试最后终于解决了问题 关于View的点击音是如何实现的请参考 点击打开链接 KeyboardView 的文档说明请参考 点击打
  • java学习----数据解析

    目录 1 何为数据解析 2 xml解析 3 Excel解析 4 json解析 一 何为数据解析 举个栗子 如果不同的程序之间需要通信 假如说A程序需要B程序做一件事 B程序说 我可以做这件事 但是需要给我必须的数据 我才能做这件事 我们可以
  • 火狐浏览器没有java的插件_win7操作系统,已安装jdk8,火狐浏览器显示没有安装java插件,为什么?...

    安装jdk需要做的重要步骤是设置环境变量 右击我的电脑 属性 高级系统设置 环境变量 进去之后需要设置两个 变量名 java home 变量值 E Program Files Java jdk1 6 0 07 变量名 classpath 变
  • git新建仓库提交项目代码+常用命令

    一 新建仓库 输入一下仓库名称 归属和路径都是生成的不需要自己去编辑 点击创建就创建了一个新的仓库 下面就是仓库刚创建好的样子 二 向仓库里提交项目代码 首先打开你要提交的项目文件看一下文件里有没有 git文件夹 方法一 已经有仓库了 前面
  • jQuery&animation实现漂流瓶扔和写动画效果

    捞一个 和 扔出去 漂流瓶纯动画 jQuery animation实现 移动端大小 单位rem
  • OK1043-openwrt系统移植

    openwrt系统移植 在GitHub中找到最新的openwrt源码 GitHub网站 GitHub openwrt openwrt at v22 03 5 下载openwrt 22 03 5稳定发行版源码 git clone https
  • 3Dmax和C4d有什么区别?

    作为市面上常见的两款三维制作软件 3Dmax和C4d在当下社会中的应用范围不可谓不广泛 而出于职业发展前景的考虑 不少同学都希望通过在真正步入社会前掌握一定的技术专长 三维制作技术正是其中之一 所以这类似于3Dmax和C4d究竟有什么区别
  • #include 主要用法

    c stl栈stack的头文件为 include
  • 用SQL语句查询以后,返回不存在的值,用0代替

    最近在弄一个统计图 碰到几个问题 数据库 MS SQL Server 2005 1 用SQL语句查询以后 返回不存在的值 用0代替 基本业务是这样的 我需要统计历年和今年的数据 这个项目是从今年开始的 不可能存在历年的数据 但是这一列必须显
  • 小程序canvasToTempFilePath获取的图片地址在真机不显示???

    小程序canvasToTempFilePath获取的图片地址在真机不显示 wx canvasToTempFilePath把当前画布指定区域的内容导出生成指定大小的图片 但是直接在真机使用生成的图片地址时发现图片无法显示 这是为啥子呢 请看下