从浏览器获取图像(使用粘贴)

2023-11-24

通过浏览器(例如chrome)复制图片有两种方式,复制图片和复制图片地址。

当我复制图像地址并使用“粘贴图像”按钮粘贴它时,我可以获取从 Base64 浏览器复制的图像。但是当我复制图像时,我无法获取图像。有没有办法使用图像 coipar 来获取图像,如示例所示?

Demo

code

  clickPaste() {
    let self = this;
    (navigator as any).clipboard.readText().then(clipboard => self.clip = clipboard);
console.log(self.clip) // copy image adress ---> base64
  }

Example copy image address - working image

image

示例复制图像 - 不起作用

image3

imag4

我知道复制图像和复制图像的地址是不同的事情,但是当我使用复制图像时,我无法找到如何获取图像(blob 或 base64)。


您可以从paste 剪贴板事件's .clipboardData数据传输.

它将在.files文件列表(如果可用):

document.onpaste = (evt) => {
  const dT = evt.clipboardData || window.clipboardData;
  const file = dT.files[ 0 ];
  console.log( file );
};
img{ height: 100vh; }
<div contenteditable>You can paste the image here</div>
<figure>
  <figcaption>Copy this image</figcaption>
  <img src="https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png">
</figure>

如果您需要在此类事件之外获取它,那么您将需要使用异步剪贴板API.
不幸的是,这个 API 还没有得到很好的支持(目前仅 Blink),但无论如何,这里是您如何使用这个 API 读取图像文件。

您首先需要请求/检查"clipboard-read" 允许.
然后,如果请求没有被拒绝,您可以尝试通过调用读取剪贴板的全部内容navigator.clipboard.read()。这将返回一个数据传输项列表(从技术上讲是一个数组),您仍然需要从中选择保存.type您想要访问。
在您的情况下,您只知道它是一张图像,但图像有多种类型,因此您需要在执行此检查时确定它是哪一种。

document.getElementById('btn').onclick = async (evt) => {
  const auth = await navigator.permissions.query( { name: "clipboard-read" } );
  if( auth.state !== 'denied' ) {
    const item_list = await navigator.clipboard.read();
    let image_type; // we will feed this later
    const item = item_list.find( item => // choose the one item holding our image
      item.types.some( type => { // does this item have our type
        if( type.startsWith( 'image/' ) ) {
          image_type = type; // store which kind of image type it is
          return true;
        }
      } )
    );
    const file = item && await item.getType( image_type );
    console.log( file );
  }
};
img{ height: 100vh; }
<button id="btn">read clipboard content</button>
<figure>
  <figcaption>Copy this image</figcaption>
  <img src="https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png">
</figure>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从浏览器获取图像(使用粘贴) 的相关文章

随机推荐

  • 如何在 YouTube Android 播放器中为 YouTube 视频提供开始和结束参数?

    我正在使用 Youtube Player api 在我的应用程序中播放 YouTube 视频 我想从假设 36 秒开始播放视频 并希望在 65 秒左右结束该视频 例子 我正在使用 youtubeAndroidPlayerApi 我没有找到
  • IIS Web 部署 - 创建虚拟目录?

    在 VS2010 IIS 7 5 上开发站点时 我使用 Web Deploy 将站点从我的计算机发布到开发站点服务器 该站点有大约 40 个虚拟目录 我想在部署期间在服务器上自动创建这些目录 有没有一种简单的方法可以做到这一点 我正在考虑编
  • ASP.NET 表单身份验证和“无身份验证”子文件夹

    是否可以禁用经过表单验证的网站子文件夹中的所有身份验证 你如何做到这一点 是的 将 web config 文件放在子文件夹中 其中包含以下内容
  • 如何构建自定义 libcurl 以仅支持 HTTP / HTTPS 协议

    我仅使用 libcurl 来发出 HTTP HTTPS 请求 我已经下载了源代码并构建为静态库 我的最终可执行文件的大小有所增加 我正在尝试减少我的可执行文件 因为我有其他限制 在分析过程中 我观察到 libcurl 是支持许多协议 包括
  • 如何循环遍历表的所有行? (MySQL)

    我有一张表A 有一个主键ID 现在我想遍历 A 中的所有行 我发现类似 对于 A 中的每条记录 之类的内容 但这似乎不是您在 MySQL 中执行的方式 事情是对于每一行 我想获取一个字段并对其进行转换 将其插入到另一个表中 然后更新该行的一
  • 嵌入编程式 UIView 中的自动布局 XIB 未调整父级的大小

    我有一个 xib 文件 表示一个带有自动布局的简单视图 我正在实例化它 NSBundle mainBundle loadNibNamed name 0 并添加到以编程方式创建的UIView via addSubview 问题是视图没有拉伸以
  • 如何检测Python在幕后进行的方法调用?

    特别是 我想查看特定代码行正在调用哪个魔术方法 例如 我知道1 2实际上打电话 1 add 2 and 1 2 3 0 calls 1 2 3 getitem 0 我想知道其他操作调用了哪些魔术方法 而不必在网上查找 没有一个好的方法来检查
  • 使用 Node js imap 读取电子邮件正文

    我正在尝试读取使用 Node js 检索的电子邮件正文 我正在使用这个 npm 模块 https github com mscdex node imap 除了阅读正文内容之外 我几乎可以获得电子邮件的所有信息 有任何想法吗 Thanks 您
  • Laravel 5.6 aws cloudwatch 日志

    将 laravel 从 5 4 升级到 5 6 Laravel 从 5 6 版本开始删除了 app gt configureMonologUsing aws 的教程不再适用 https aws amazon com tw blogs dev
  • 如何制作没有文字的单选按钮?

    我只想要一个没有文本的简单 RadioBttun 我执行了下面的代码 但我得到的是一个单选按钮小部件 空间很小 我认为这是保留给文本的 那么应该如何摆脱这个空间呢
  • 为什么锁对象必须是静态的?

    在多线程中使用私有静态只读对象进行锁定是很常见的 据我所知 私有通过加强封装减少了锁定对象的入口点 从而减少了对最重要内容的访问 但为什么是静态的呢 private static readonly object Locker new obj
  • 使用 QtCreator 设置 GDB

    我有一个使用OpenCV和cmake的简单项目 并且有两个源文件 只有segmentation h和segmentation cpp 这是 cmake 文件 project Segment cmake minimum required VE
  • 无需预览即可打印 WebBrowser,即单击打印

    我有一个 c Net 应用程序 它打开一个自定义打印预览表单 损害显示 HTML 文件的 WebBrowser 表单控件和打印 Web 浏览器控件内容的按钮 webBrowser Print 但是 我现在想打印 HTML 文件而不打开此表单
  • C#:当两个命名空间相似时尝试解析类时出现问题

    我遇到了一个问题 无法引用不同名称空间中的类 我有2节课 namespace Foo public class Class1 namespace My App Foo public class Class2 public void Some
  • 使用 CAML 的 MAX 查询

    我想选择一个共享点列表项 该列表项具有特定列的最大值 如何使用 CAML 查询执行此操作 以下 CAML 查询将返回给定列的最大值 var maxValue try using SPSite objSite new SPSite sSite
  • 如何在 JavaScript 中捕获 ERR_CERT_AUTHORITY_INVALID

    我正在开发的 Web 应用程序需要从本地网络内的许多不同的 IOT 获取数据 例如 const response await fetch https 192 168 0 245 api auto login options 由于是https
  • 预览设备未显示在预览中

    struct ContentView Previews PreviewProvider static var previews some View ContentView previewDevice PreviewDevice rawVal
  • 在基类中打印派生类名称

    如何从基类打印派生类名称 而无需一直链接构造函数 换句话说 是否可以严格从基类执行此操作 而无需在每个派生类中添加代码 这是我得到的一个例子 如果有一种方法我想摆脱构造函数链接 EDIT 理想情况下 我正在寻找添加到基类中的东西 而不必编辑
  • gcc编译时字符串表溢出错误

    当我尝试从以下位置构建一个大型复杂示例 在模板实例化方面修改为更复杂 时boostspirit Qi编译器 教程我收到以下错误消息 debug expression o 1 error section debug frame ZNK5boo
  • 从浏览器获取图像(使用粘贴)

    通过浏览器 例如chrome 复制图片有两种方式 复制图片和复制图片地址 当我复制图像地址并使用 粘贴图像 按钮粘贴它时 我可以获取从 Base64 浏览器复制的图像 但是当我复制图像时 我无法获取图像 有没有办法使用图像 coipar 来