微信小程序获取图片网页链接转换为 base64 ,wx.arrayBufferToBase64(binary) 提示已弃用的处理方法

微信小程序wx.arrayBufferToBase64 提示已弃用的问题,可以通过其他方式实现将图片网页链接转换为 Base64 文件。以下是几种替代方法和完整的实现方案。

1. 问题分析
wx.arrayBufferToBase64 在较新版本的小程序中可能会提示已弃用,建议开发者使用 JavaScript 原生方式处理。
如果目标是将网络图片转换为 Base64,可以使用 ArrayBufferUint8Array 配合 btoa() 函数。

2. 替代方案
2.1 使用原生 JavaScript 方法
通过 Uint8ArrayArrayBuffer 转换为 Base64。
实现步骤
使用 wx.downloadFile 下载图片。
将图片内容转换为 ArrayBuffer
使用自定义的 arrayBufferToBase64 方法实现转换。
代码实现

// 自定义 ArrayBuffer 转 Base64 函数
function arrayBufferToBase64(buffer) {
  let binary = '';
  const bytes = new Uint8Array(buffer);
  const len = bytes.byteLength;
  for (let i = 0; i < len; i++) {
    binary += String.fromCharCode(bytes[i]);
  }
  return btoa(binary); // btoa: Base64 编码
}

// 示例:将网络图片转换为 Base64
function imageToBase64(url) {
  return new Promise((resolve, reject) => {
    wx.downloadFile({
      url: url,
      success(res) {
        if (res.statusCode === 200) {
          wx.getFileSystemManager().readFile({
            filePath: res.tempFilePath, // 下载的临时文件路径
            encoding: 'binary', // 以二进制读取文件
            success: (readRes) => {
              const base64 = `data:image/jpeg;base64,${arrayBufferToBase64(readRes.data)}`;
              resolve(base64);
            },
            fail: (err) => reject(err)
          });
        } else {
          reject(new Error('下载图片失败'));
        }
      },
      fail: (err) => reject(err)
    });
  });
}

// 使用示例
imageToBase64('https://example.com/image.jpg')
  .then((base64) => {
    console.log('Base64:', base64);
  })
  .catch((err) => {
    console.error('转换失败:', err);
  });

2.2 使用 wx.getFileSystemManager
直接读取下载的图片文件为 Base64,无需 ArrayBuffer 转换。
代码实现

function imageToBase64(url) {
  return new Promise((resolve, reject) => {
    wx.downloadFile({
      url: url,
      success(res) {
        if (res.statusCode === 200) {
          wx.getFileSystemManager().readFile({
            filePath: res.tempFilePath,
            encoding: 'base64', // 指定 Base64 直接读取
            success: (readRes) => {
              const base64 = `data:image/jpeg;base64,${readRes.data}`;
              resolve(base64);
            },
            fail: (err) => reject(err)
          });
        } else {
          reject(new Error('下载图片失败'));
        }
      },
      fail: (err) => reject(err)
    });
  });
}

// 使用示例
imageToBase64('https://example.com/image.jpg')
  .then((base64) => {
    console.log('Base64:', base64);
  })
  .catch((err) => {
    console.error('转换失败:', err);
  });

优势
更加直接,避免了手动处理 ArrayBuffer
微信支持直接读取为 Base64,无需额外编码步骤。

3. 注意事项
图片格式
在拼接 Base64 字符串时,请根据图片格式修改 MIME 类型。例如:JPEG:data:image/jpeg;base64,
PNG:data:image/png;base64,
GIF:data:image/gif;base64,
跨域问题
如果图片地址是跨域资源,可能需要后端代理或者确保服务器支持 CORS。
性能优化
Base64 转换后的数据较大,占用更多的存储和带宽,不建议频繁转换和存储大量图片。
如果只用于前端显示,优先考虑使用临时路径或 CDN 地址。
微信小程序权限
确保用户授权了下载文件相关权限。
临时文件路径可能有生命周期限制,需及时清理无用文件。

通过以上方法,可以高效替代 wx.arrayBufferToBase64 并实现图片链接到 Base64 的转换。推荐使用第二种方法(wx.getFileSystemManager),更简洁且符合微信小程序的最佳实践。

发布者:myrgd,转载请注明出处:https://www.object-c.cn/4893

Like (0)
Previous 2024年11月28日 下午7:33
Next 2024年11月28日 下午8:10

相关推荐

  • 使用 Python Selenium 控制 Chrome 浏览器 进行自动化操作

    使用 Python Selenium 控制 Chrome 浏览器 进行自动化操作是 Web 自动化测试和爬虫的常用方法之一。以下是一个完整的入门教程,包括如何安装、配置以及一些示例代码。 1. 安装所需环境 1.1 安装 Selenium 使用 pip 安装 Selenium: 1.2 下载 ChromeDriver 1.3 配置 ChromeDriver …

    2024年11月25日
    00
  • 在 Jupyter Notebook 中使用 Markdown 的相关技巧

    在 Jupyter Notebook 中使用 Markdown 是一种常见的方式来撰写文档和注释,增强数据分析和报告的可读性。Markdown 在 Jupyter Notebook 中不仅支持标准的文本格式化功能,还提供了许多扩展功能,比如数学公式、表格、代码块等。以下是一些常用的 Markdown 技巧,可以帮助你提升 Jupyter Notebook 中…

    2024年11月27日
    00
  • Android Studio 2024 版本安装 SDK、Gradle环境配置

    在 Android Studio 2024 中,配置 SDK 和 Gradle 环境是非常重要的步骤,确保开发环境能正确运行、编译和构建你的 Android 项目。以下是详细的安装和配置步骤。 1. 安装 Android Studio 2024 首先,你需要安装 Android Studio 2024。你可以从 Android Studio 官网 下载最新版…

    2024年11月23日
    00
  • 多方面的优化包括启动时间、React Native 速度提升 550% 运行时性能以及渲染效率的提升

    React Native 速度提升 550% 可能涉及多方面的优化,包括启动时间、运行时性能以及渲染效率的提升。这通常是通过框架改进、代码优化和工程实践的结合来实现的。以下是实现 React Native 性能大幅提升的一些关键方法和策略: 1. 启动时间优化 1.1 减少 JS Bundle 大小 1.2 预加载资源 1.3 使用优化的原生模块 2. 渲染…

    2024年12月7日
    00
  • 在 uni-app 小程序中,使用 uni.getLocation 获取用户位置信息等

    在 uni-app 小程序 中,使用 uni.getLocation 获取用户位置后,可以通过 腾讯地图 API 将经纬度转化为详细的地址信息(如省、市、区、街道等)。以下是完整的操作流程: 1. 前置准备:开通腾讯地图 API 服务注册腾讯位置服务账号:登录 腾讯位置服务官网。创建项目并获取 Key:进入 控制台,创建新应用,选择 小程序。获取生成的 ke…

    2024年11月26日
    00
  • 在IOS中使用WebView内嵌H5页面,使用a标签点击跳转无效的问题

    在 iOS 中,使用 WebView 嵌入 H5 页面时,可能会遇到点击 <a> 标签跳转无效的问题。这个问题通常是由于 iOS WebView 的默认行为或配置导致的,特别是在使用 UIWebView 或 WKWebView 时。以下是几种解决方法,可以帮助解决这个问题。 1. 使用 WKWebView 替代 UIWebView 首先,确保你使…

    2024年11月23日
    00
  • uniapp基于vue3,element plus组件库以及axios通讯开发

    在 uniapp 前端开发中,使用 Vue3、Element Plus 组件库和 Axios 进行通讯是一种常见的组合。下面是一个简单的步骤和实践指南,帮助你更好地使用这些工具进行开发。1. 安装和配置 Vue3 和 Element Plus首先,确保你已经安装了 uniapp 项目,并且设置好相关依赖。在项目中,安装 Element Plus 组件库以便在…

    2024年11月27日
    00
  • 使用 HBuilderX 开发 uni-app 项目通过以下步骤实现微信小程序中获取用户头像、昵称、授权登录以及用户手机号

    在使用 HBuilderX 开发 uni-app 项目时,可以通过以下步骤实现微信小程序中获取用户头像、昵称、授权登录以及用户手机号。 1. 配置微信小程序的权限 在微信小程序后台中,确保已经启用了相关的功能模块,如: 同时在 app.json 中配置授权弹窗的提示: 2. 授权获取用户头像、昵称 从微信小程序 2.10.4 版本开始,推荐使用 wx.get…

    2024年12月11日
    00
  • 微信小程序开发中使用 Tailwind CSS 提高开发效率和代码的可维护性

    Tailwind CSS 是一个利用原子化 CSS 类来构建用户界面的框架,在微信小程序开发中使用 Tailwind CSS 可以提高开发效率和代码的可维护性。以下是在微信小程序中使用 Tailwind CSS 进行原子 CSS 开发的具体步骤: 安装 Tailwind CSS 配置 Tailwind CSS 引入样式:在微信小程序的全局样式文件app.wx…

    2024年12月15日
    00
  • 微信小程序Map地图使用详细教程,获取小程序定位,绑定地图点击事件

    在微信小程序中,地图功能可以通过 Map 组件来实现,结合定位和点击事件,可以实现丰富的地图交互功能。下面将详细讲解如何使用 Map 组件,包括获取小程序定位、绑定地图点击事件等功能。 1. 在小程序中使用 Map 地图 (1) 引入 Map 组件 在小程序页面的 .wxml 文件中,使用 <map> 组件来嵌入地图。该组件支持显示地图、定位、缩…

    2024年11月23日
    00
  • 在 React Native 0.72.5 中使用 Hermes 引擎时JavaScript 的 Function.prototype.toString() 转成字符串

    在 React Native 0.72.5 中,使用 Hermes 引擎时,JavaScript 的 Function.prototype.toString() 方法的行为可能与其他 JavaScript 引擎(如 V8 或 JavaScriptCore)有所不同。这种差异源于 Hermes 的设计,旨在提升性能和减少内存开销。 问题描述 在 Hermes …

    2024年12月7日
    00
  • 实现微信支付提现api接口教程

    微信支付的提现功能,通常是通过调用 企业付款到零钱 API 或 企业付款到银行卡 API 来实现的。以下是如何使用微信支付提现 API 的详细教程,包括其前置条件、接口调用以及注意事项。 1. 准备工作 1.1. 开通微信支付商户号 1.2. 配置证书 将这些文件保存在你的服务器上,用于发起 HTTPS 请求。 1.3. 获取 API 密钥 2. 企业付款到…

    2024年11月24日
    00
  • Redis中如何使用lua脚本redis与lua的相互调用方法

    在 Redis 中,Lua 脚本 提供了一种强大的方式来执行原子操作,可以在 Redis 服务器上直接执行 Lua 代码,从而避免了多次网络往返和保证操作的原子性。Redis 内置了对 Lua 脚本的支持,通过 EVAL 命令来执行脚本,EVALSHA 则用于执行已经加载到 Redis 服务器的脚本。1. Redis 与 Lua 脚本的基本交互1.1 基本的…

    2024年11月28日
    00
  • 在开发 Angular 项目时,使用 RangeSlider 控件时的常见问题

    在开发 Angular 项目时,使用 RangeSlider 控件时,可能会遇到一些常见的问题。以下是一些问题及其解决方案:1. 滑块值不更新问题描述:当用户拖动滑块时,滑块的值不会实时更新,或者显示的值不正确。解决方案:确保绑定的模型是双向绑定,使用 ngModel 或者监听 input 事件来确保滑块值能实时更新。例如: 确保你已经导入了 FormsMo…

    2024年11月27日
    00
  • 云服务器的 宝塔面板 中配置 PHP 支持 WebP 格式的图片

    在云服务器的 宝塔面板 中配置 PHP 支持 WebP 格式的图片,主要是通过安装或启用 GD 库或者 ImageMagick 来实现 WebP 图片的处理支持。下面是一步步的操作方法:1. 确保服务器已经安装 WebP 扩展WebP 格式的支持需要 PHP 依赖于 GD 库或 ImageMagick 库。如果你使用的是 PHP 7.0 及以上版本,通常 G…

    2024年11月29日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信