electron 剪贴板:改进了对读取图像的支持

lnlaulya  于 5个月前  发布在  Electron
关注(0)|答案(3)|浏览(58)

一些背景信息:我正在编写一个笔记应用,其中一个最受请求的功能是能够将剪贴板中复制的图像直接粘贴到笔记中。
我想尽可能完美地实现这个功能,但据我所知,Electron提供的当前相关API有一些限制,无法很好地实现这个功能。

问题1 - 不存在的图像

即使剪贴板中没有图像,clipboard.readImage仍然返回一个NativeImage示例。
我不知道为什么当剪贴板中没有图像时,有人会想要返回这些无用的图像,但更重要的是,这种行为似乎在文档中没有记录,文档中提到这个函数返回“剪贴板中的图像内容”。
我认为当剪贴板中没有图像时,这个方法应该返回nullundefined。如果出于某种原因无法更改,那么文档中应该提到,如果在剪贴板中没有找到实际的图像,将返回0x0图像。

问题2 - 意外的转换

NativeImage对象有很多.toFORMAT方法,但只有一个toDataURL方法,而且文档说toDataURL返回“图像的数据URL”,所以考虑到任何图像都可以用数据URL编码,我原本以为特定格式的图像会保留特定的数据URL格式,例如,GIF的数据URL应该以data:image/gif开头,但根据这个方法,实际上这个函数是将图像转换为PNG,而不管它们的原始格式是什么。因此,对于任何GIF,返回的数据URL都不是编码该图像的实际数据URL,而是将该图像转换为PNG的可能数据URL,这并不是我所期望的。

问题3 - 保留原始数据

应该能够检索剪贴板中编码图像的原始缓冲区,以免丢失任何信息或以任何方式更改图像。
最引人注目的是,没有方法可以检索复制的图像作为GIF或SVG,这从根本上使动画GIF或矢量图像无法以任何合理的方式复制。
提供的方法用于转换为PNG和JPG也存在问题,我不想将用户在剪贴板中复制的PNG图像转换为JPG或反之,以免引入任何伪影,并总的来说不想改变复制的图像。此外,toJPEG方法要求我提供质量因子,我只想要原始质量的图像,这在今天似乎不可能。
TL;DR:我真的希望有一个函数,只要返回剪贴板中复制的图像的扩展名、MIME类型和缓冲区,不作任何更改。

gmol1639

gmol16391#

@fabiospampinato 对于SVGs - 使用fs读取文件是否不起作用?将其复制为文本,然后将其作为文本读取并写回svg文件?

huwehgph

huwehgph2#

@codebytere 当我打开这个问题时,我不知道有人能做到这一点,这种方法确实有效,但是:

  • 我觉得获取复制文件的路径的最简单方法涉及到一些晦涩难懂的代码,这并不理想。
  • 我完全不知道在Linux下如何做到这一点。
  • 我不确定如果一个图像直接从另一个应用程序(如浏览器)放入剪贴板会发生什么,它是否有路径可以复制?
  • 实际上,我刚刚又手动尝试了这个,只是为了检查我之前的观点,似乎现在执行 require ( 'electron' ).clipboard.read ( 'NSFilenamesPboardType' ) 会崩溃应用程序,这一点都不好。
c9qzyr3d

c9qzyr3d3#

@fabiospampinato 我找到了一种处理SVG的方法,我可以尝试添加它!

相关问题