Page 1 of 1

Ray 保存图片到相册

Posted: 2026年 Mar 4日 14:09
by Mical

我的项目到了优化阶段, 有个界面用到的动画比较多(rjs实现的),有点卡顿.看到前面有优化的文章,最终的手段主要就是改成gif(交互方式我没得权动, 客户已经规定死了).
但是我不知道怎么把截图(base64字符串)保存到相册中,有没有相关的接口?
谢谢!


Re: Ray 保存图片到相册

Posted: 2026年 Mar 4日 14:18
by muhai

参考demo:
https://github.com/Tuya-Community/tuya- ... /index.tsx

Code: Select all

import {
  getFileSystemManager,
  saveImageToPhotosAlbum,
  env,
  showToast,
  authorize
} from '@ray-js/ray';

// 假设 base64String 是你获取到的截图数据
const saveScreenshot = async (base64String: string) => {
  const fs = getFileSystemManager();
  // 1. 定义临时存储路径 (建议加上时间戳防止覆盖)
  const filePath = `${env.USER_DATA_PATH}/screenshot_${Date.now()}.png`;
  
// 去除 base64 头部(如果是 data:image/png;base64, 格式) const cleanData = base64String.replace(/^data:image\/\w+;base64,/, ''); try { // 2. 检查并请求相册权限 await new Promise((resolve, reject) => { authorize({ scope: 'scope.writePhotosAlbum', success: resolve, fail: reject, }); }); // 3. 将 Base64 写入文件 await new Promise((resolve, reject) => { fs.writeFile({ filePath, data: cleanData, encoding: 'base64', success: resolve, fail: reject, }); }); // 4. 保存文件到相册 saveImageToPhotosAlbum({ filePath, success: () => { showToast({ title: '保存相册成功', icon: 'success' }); // 可选:保存成功后删除临时文件释放空间 fs.unlink({ filePath }); }, fail: (err) => { console.error('保存相册失败', err); showToast({ title: '保存相册失败', icon: 'error' }); } }); } catch (error) { console.error('处理流程出错', error); showToast({ title: '授权或写入失败', icon: 'error' }); } };