HarmonyOS鸿蒙Next中app使用base64的格式的图片数据分享到微信该如何实现?

HarmonyOS鸿蒙Next中app使用base64的格式的图片数据分享到微信该如何实现? 目前无法获取到网络的uri,并且后端返回的只有base64图片数据,大约是200kb,请问有什么好方法在不压缩画质的情况下分享到微信?

5 回复

1/ 将Base64数据解码为二进制流后写入应用沙箱目录,生成临时图片文件:

import { fileIo } from '@kit.CoreFileKit';

async function saveBase64ToTempFile(base64Data: string): Promise<string> {

  const tempDir = getContext().filesDir + '/temp/'; // 获取应用沙箱目录

  const fileName = `wechat_share_${Date.now()}.png`;

  const filePath = tempDir + fileName;

  

  // 创建目录(若不存在)

  await fileIo.mkdir(tempDir);

  

  // 解码Base64并写入文件

  const buffer = Uint8Array.from(atob(base64Data), c => c.charCodeAt(0));

  await fileIo.writeFile(filePath, buffer);

  

  return filePath;

}

2/ 通过微信开放SDK的shareImageMessage接口传递文件路径:

import { wechat } from '@tencent/wechat_open_sdk';

async function shareToWeChat(filePath: string) {

  const imageParam: wechat.ImageParam = {

    scene: wechat.Scene.SESSION, // 分享到会话

    image: {

      uri: `file://${filePath}` // 必须使用file协议URI

    }

  };

  await wechat.shareImageMessage(imageParam);

}

更多关于HarmonyOS鸿蒙Next中app使用base64的格式的图片数据分享到微信该如何实现?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


Base64 解码

import util from '@ohos.util';
// 解码Base64字符串为ArrayBuffer
const base64Helper = new util.Base64Helper();
const arrayBuffer = base64Helper.decodeSync(base64Str);

将文件临时存储

import fs from '@kit.FileKit';
// 在缓存目录创建临时文件
const tempFilePath = `${getContext().cacheDir}/temp_image.jpg`;
await fs.write(tempFilePath, arrayBuffer);

构建分享数据

import systemShare from '@kit.ShareKit';
// 创建SharedRecord并指定文件URI
const shareRecord: systemShare.SharedRecord = {
  uri: `file://${tempFilePath}`, // 必须符合HarmonyOS文件URI规范
  mimeType: 'image/jpeg'
};

执行分享操作

try {
  await systemShare.share([shareRecord]);
} catch (err) {
  console.error('分享失败:', err);
}

微信分享图文详情可参考分享与收藏功能,针对分享图片限制100KB大小,可以将图片压缩后分享,详情参考HarmonyOS Next 图片压缩方案

使用imageBase64发送图片

let imageObject = new wxopensdk.WXImageObject
let buf: buffer.Buffer = buffer.from(data);
imageObject.imageData = buf.toString('base64', 0, buf.length);

let mediaMessage = new wxopensdk.WXMediaMessage()
mediaMessage.mediaObject = imageObject

let req = new wxopensdk.SendMessageToWXReq()
req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession
req.message = mediaMessage

this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)

在HarmonyOS Next中,通过Share Kit的DataShareHelper实现图片分享。将Base64数据转换为PixelMap,使用DataShareHelper接口写入临时文件,指定MIME类型为image/*,调用share()方法分享至微信。需确保微信已安装并具有接收分享权限。

在HarmonyOS Next中,可以通过以下步骤实现base64格式图片数据分享到微信:

  1. 将base64数据转换为PixelMap对象:
import image from '@ohos.multimedia.image';

let base64Data = 'data:image/png;base64,...'; // 替换为实际数据
let buffer = base64.decodeSync(base64Data.split(',')[1]);
let imageSource = image.createImageSource(buffer);
let pixelMap = await imageSource.createPixelMap();
  1. 使用Share Kit分享到微信:
import share from '@ohos.share';

let shareData = {
  type: share.ShareType.IMAGE,
  pixelMap: pixelMap,
  title: '分享图片'
};

try {
  await share.share(shareData);
} catch (error) {
  console.error('分享失败: ' + error);
}

这种方式直接使用PixelMap分享,可以保持原始画质,无需压缩处理。注意确保base64数据格式正确,且图片大小在微信允许的分享限制内。

回到顶部