离子电容器 - 画廊截图 (iOS)

Ionic Capacitor - Screenshot to Gallery (iOS)

尚未找到任何解决方案。

我正在使用 Ionic Framework 5+ 和 Capacitor 3+。

我需要能够让用户在 iOS 和 Android 上截取屏幕截图,并将该屏幕截图自动保存到用户的照片库中。 Android 与以下代码配合使用效果很好。 iOS 也可以,但是它将文件保存在一个临时目录中,因此我需要将文件移动到它需要在 iOS 上转到的任何目录,以便用户可以在他们的照片库中看到它。

import { Screenshot } from '@ionic-native/screenshot/ngx';

this.screenshot.save('jpg', 80).then((res) => {
  this.filePath = res.filePath;
  console.log(this.filePath);
});

有没有办法使用文件系统电容器 API 将此 this.filePath 的照片保存到 iOS 图库?

还有其他方法可以在 iOS 上从屏幕截图转到图库吗?

在 iOS 上,图库是您应用程序外部的东西,无法通过文件系统插件访问,因为没有路径(即使有,iOS 应用程序沙盒化,您无法访问其他应用,只能访问您的应用内容)

您可以使用本机代码将本机 UIImage 保存到图库:

UIImageWriteToSavedPhotosAlbum(yourImage, nil, nil, nil) 但是你有一个本地路径,而不是 UIImage,所以你必须先将路径转换为 ​​UIImage,比如 let yourImage = UIImage.init(contentsOfFile: imagePath)。因此,使用该代码,您可以创建一个插件来发送路径并将图像保存到图库。

您还可以搜索已经这样做的插件。 有一个将表示图像的 base64 字符串保存到图库中 https://ionicframework.com/docs/native/base64-to-gallery

还有一个capacitor-community/media有一个savePhoto功能,它获取一个路径并将照片保存到图库

https://github.com/capacitor-community/media#api

这适用于 iOS。我目前正在生产中使用它。根本问题在于,Capacitor Community Media 库没有很好地记录以指定使其工作所需的确切格式。这是库的工作 package.json 版本:"@capacitor-community/media": "github:dragermrb/media".

this.screenshot.save().then(async (res) => {

  const savePhotoResult = await Media.savePhoto({
    path: `file://${res.filePath}`,
    album: this.album.identifier
  });
});