反应本机视图拍摄捕捉模糊屏幕截图

2024-03-23

我正在使用react-native-snap-shot 库来共享我的屏幕。它对于小内容工作正常,但对于详细视图长滚动视图,其模糊且文本不可读。

<ViewShot ref="viewShot" options={{ format: 'jpg',
            quality: 0.8,height:100}}>
//content and images here from server
</ViewShot>

我调用共享图像的函数

captureScreenIos = () => {
     console.log("Clicked for IOS");
     this.changeLoaderStatus();
     var thisFun = this;
      this.refs.viewShot.capture({width: 2048 / PixelRatio.get(), height: 2048 / PixelRatio.get()}).then(res => {
        RNFetchBlob.fs.readFile(res, 'base64').then((base64data) => {
          console.log("base64data",base64data)
          let base64Image = `data:image/jpeg;base64,${base64data}`;
          const shareOptions = {
            title: "My Beauty Squad",
            //message: "Download my beauty squad with below link."+ "\n" + "https://itunes.apple.com/uk/app/my-beauty-squad/id1454212046?mt=8" ,
            url: base64Image,
            subject: "Share news feed"
          };
          Share.open(shareOptions);
          thisFun.changeLoaderStatus();
        })
      }).catch(error => {
        console.log(error, 'this is error');
        this.changeLoaderStatus();
      })
     }

任何人有建议请分享...谢谢


解决这个问题非常困难,因为我没有得到任何解决方案,所以我用了我的方式。我在这里分享所有相关代码:

这将捕获特定区域并且它处于渲染状态

我导入以下所有库:

import ViewShot, { capture, captureScreen, captureRef} from "react-native-view-shot";
import RNFetchBlob from 'react-native-fetch-blob';
import Share, {ShareSheet} from 'react-native-share';

我添加了 this.screenshot = {};在构造函数中并绑定 iOS 和 Android 的单独函数。

constructor(props) {
    super(props);
    this.screenshot = {};
    this.state = {
      newsListArray: [],
      loading:false,
      alertMsg:'',
      errorMsg:'',
      refreshing: false,
    },
    this._captureScreenIos = this._captureScreenIos.bind(this);
    this._captureScreenAndroid = this._captureScreenAndroid.bind(this);
  }

之后在渲染中我使用了以下代码:

renderRowItem = (itemData) => {
   return (
    <View collapsable={false} ref={(shot) => { this.screenshot[itemId] = shot; }} >
      // Add you code here
    </View>
   )
  }

这是我捕获特定区域的按钮:

<TouchableOpacity onPress={ () => {
                Platform.OS === 'ios' ?
                this._captureScreenIos(itemData.item._id) :
                this._captureScreenAndroid(itemData.item._id)
              }}>
                <View style={{flexDirection:'row'}}>
                  <Icon name="share-alt" size={16} color="#ffb6cf" />
                  <Text style={{paddingLeft:6,fontSize:12,fontWeight:'500'}}>Share News</Text>
                </View>
              </TouchableOpacity>

我在为 iOS 和 Android 调用相同的函数时遇到了很多问题,所以我为两者调用单独的函数,如下例所示:

Android:

_captureScreenAndroid(itemId) {
  this.changeLoaderStatus();
  captureRef(this.screenshot[itemId],{format: 'png',quality: 0.8}).then(res => {
    const granted =  PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
      {
        title: '<Project Name> Storage Permission',
        message: '<Project Name> needs access to your storage ' +
          'so you can save your photos',
      },
    );
    if (PermissionsAndroid.RESULTS.GRANTED) {
      var promise = CameraRoll.saveToCameraRoll(res);
      var thisFun = this;
      promise.then(function(result) {
        RNFetchBlob.fs.readFile(result, 'base64').then((base64data) => {
          console.log("base64data",base64data)
          let base64Image = `data:image/jpeg;base64,${base64data}`;
          let shareOptions = {
            title: "title here",
            message: "add your message here" ,
            url: base64Image,
            subject: "subject here"  //  for email
          };
          Share.open(shareOptions);
          thisFun.changeLoaderStatus();
        })
      }).catch(function(error) {
        this.changeLoaderStatus();
      });
    }else{
      this.changeLoaderStatus();
    }
 })
}

iOS:

_captureScreenIos(itemId) {
  this.changeLoaderStatus();
  var thisFun = this;
  var viewShotRef = itemId;
   captureRef(this.screenshot[itemId],{format: 'jpg',quality: 0.8}).then(res => {
     RNFetchBlob.fs.readFile(res, 'base64').then((base64data) => {
       let base64Image = `data:image/jpeg;base64,${base64data}`;
       const shareOptions = {
         title: "<Project-Name>",
         message: "Download <Project-Name> "+ "\n" + <MY APP STORE URL> ,
         url: "file://"+res,
         subject: "<Project-Name>"
       };
       Share.open(shareOptions);
       thisFun.changeLoaderStatus();
     })
   }).catch(error => {
     console.log(error, 'this is error');
     this.changeLoaderStatus();
   })
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反应本机视图拍摄捕捉模糊屏幕截图 的相关文章

随机推荐

  • 为什么 C4062 Visual C++ 警告默认关闭?

    根据 MSDN Visual C 可以发出C4062 警告 http msdn microsoft com en us library fdt9w8tf aspx when 枚举用于switch and 该枚举的至少一个元素没有标签 并且
  • 扩展自定义验证类

    我最近一直在尝试 Laravel 4 并尝试让自定义验证类发挥作用 验证类
  • 在 PHP 或 MySQL 中对小数进行排序

    我正在开发一个分类账应用程序 我的主要问题是我的客户有这样的代码的会计科目表 1 1 1 1 1 2 1 1 10 1 1 11 使用 PHP 或 MySQl 我只能设法将它们排序 1 1 1 1 1 10 1 1 11 1 1 2 有关如
  • 如何在Odoo中获取ID字段值[重复]

    这个问题在这里已经有答案了 我是 Odoo 8 的新手 在获取对象的 ID 值时遇到一些困难 例如 hr employee 的 ID 字段值 您能给我一些这方面的示例吗 请阅读v8 0 官方文档 https www odoo com doc
  • 如何使用 XAML 创建简单的 2D NURBS?

    我需要创建一个具有两个端点和 n 个控制点的样条线 据我所知 贝塞尔曲线仅允许一个控制点 而贝塞尔样条允许两个控制点 但是 我需要能够添加我认为合适的任意数量的控制点 而不仅限于一两个 Here is an example of what
  • 如果产品属于某个类别 WooCommerce,如何设置选项卡(仅)

    我设置了一个选项卡来添加一个包含 WooCommerce 规范的选项卡 我想将其包装到 if 语句中 以便仅在产品属于某个类别时才设置选项卡 add filter woocommerce product tabs woo custom pr
  • 尝试调用 getWritableDatabase() 时不断收到 NullPointerExceptions

    我是 Android 框架的新手 我无法通过 SQLite 的基础知识 我正在尝试构建一个非常简单的应用程序 它有一个 EditText 搜索框 当按下某个键时 它会在 SQLite 数据库上执行 Like word 搜索 以查找在 Edi
  • 带有 ref 变量的函数委托

    public object MethodName ref float y elided 我如何定义一个Func该方法的委托 它不能通过Func但你可以定义一个自定义delegate for it public delegate object
  • 我应该如何为 PHP 中的所有页面设置全局变量

    Question 我要实现 associate name and app key全局变量 这样我就可以在任何我想要的页面上访问它们 下面是我的头文件中的代码 获取变量将出现在索引页中 它在索引页面上工作正常 因为 GET 数据可用 但是当用
  • Powerpoint 演示文稿中可编辑 HTML、CSS 和 Javascript?

    我想知道是否可以在 powerpoint 内有一个可编辑的 HTML 演示界面 如 Plunkr 用于进行有关 HTML JavaScript 等的教育演示 有人这样做过吗 是否可以在 powerpoint 中嵌入带有 plunkr 或本地
  • 树图如何使用红黑树算法

    我读过很多关于红黑树的文章 其中操作需要 O log n 时间 我不太清楚它是如何工作的 以及与二叉搜索树相比 树图实际上如何使用红黑树算法来平衡树 参考链接https www topcoder com community data sci
  • PhoneGap Ripple 模拟器总是报告格式错误的 config.xml

    有谁知道什么会导致最新版本的 Chrome 上的 Ripple 模拟器 最新版本 always报告格式错误或丢失的配置文件 在应用程序的根目录中找不到 config xml 文件或者 XML 格式错误 我有我的config xml完全存在于
  • Azure 上的 PushSharp ASP.net MVC4 问题。 - 无法连接APNS反馈服务

    我有一个 ASP Net MVC4 网站 在 Azure 上运行一个简单的 Web 服务 为我们的移动应用程序提供推送通知服务 它在我的计算机上的本地 IIS 实例上运行时可以工作 但一旦部署到 Azure 它会工作一段时间然后停止 看来P
  • x 轴上只有一个变量的 Corrplot

    我有一个包含大约 200 个变量的数据集 我希望了解其中一个变量如何与所有其他变量相关 但是 当我使用corrplot 它给了我完整的相关矩阵200x200细胞的大小 并且大到可以很好地可视化 我将使用iris可重现示例的数据集 说吧 我只
  • 在 C++ 中是否可以获取作为参数传递的变量名称的字符串? [复制]

    这个问题在这里已经有答案了 我希望能够做这样的事情 int myVar 3 void logger int param std cout lt lt nameOf param lt lt lt lt param lt lt std endl
  • 如何删除SSIS中数据流任务中的列?

    I use SQL Server 2016我很忙DataFlow task In my DataFlow task I use Multicast component因为某些原因 在我的中创建一个新的流程后DataFlow 我需要删除新流程
  • 如何使用 ActionScript 3 在 Flash 中创建文本按钮?

    当我尝试使用文本字段作为按钮时 它似乎没有buttonMode财产 如何在 Flash 项目中使用 ActionScript 以编程方式创建文本按钮 它应该是一个简单的文本 可以点击 您可以添加TextField to a Sprite并将
  • 如何在具有提升权限的 WiX 中创建的 MSI 中运行自定义操作?

    我有一个安装程序需要访问注册表并使用自定义操作复制和删除文件 在 Windows XP 中 安装程序运行良好 但在 Vista 和 7 中 安装程序显示错误 因为它无法访问文件夹 但如果我以管理员身份运行安装程序 则一切正常 因此 我需要安
  • firebreath JSAPI 在 firefox 中不会被识别

    首先介绍一下我使用 Firebreath 所做的一些背景知识 我正在使用 firebreath 在浏览器中开发渲染查看器插 件 我在插件中定义了两种 MIME 类型 一种用于主查看器 另一种用于 2D 平面图 在每个页面中 仅允许一个主查看
  • 反应本机视图拍摄捕捉模糊屏幕截图

    我正在使用react native snap shot 库来共享我的屏幕 它对于小内容工作正常 但对于详细视图长滚动视图 其模糊且文本不可读