javascript - 如何在 Javascript 中获得透明的粘贴图像

标签 javascript windows image clipboard paste

使用 event.clipboardData 检测粘贴的图像时,alpha channel 丢失。显然这是因为 Windows 将剪贴板中的图像存储为 24 位位图。

我听说有些应用程序会单独存储复制图像的透明度数据,但我不知道是否可以通过clipboardData访问。

这是我刚才写的粘贴图像检测器:
http://12Me21.github.io/paste/

最佳答案

我实际上对 Windows 剪贴板上的透明度主题进行了广泛研究,因此虽然我对 javascript 不是很熟悉,但我可以帮助您了解这些原则。

剪贴板与剪贴板类型的字符串 ID 系统一起工作,您可以同时将多个此类类型放在剪贴板上。近年来,许多应用程序(包括 MS Office 和 Gimp)开始使用“PNG”类型来表示透明图像,其中将包含原始字节流和 png 图像的字节。

然而,一种更常用的格式是 DIB 格式,它的剪贴板 ID 为“DeviceIndependentBitmap”,而这种格式可能...有问题。与 PNG 一样,它是原始字节流,但实际文件格式有点乱。有关 DIB 格式的更多信息,我建议您通读 this question and the answer I gave to it , 和 Device Independent Bitmap specsBITMAPINFOHEADER struct在 MSDN 上。长话短说,这是一种 32bpp RGB 格式,被滥用为(有时被误认为)ARGB。不过,我不知道在 Javascript 中将 DIB 解析成可用图像的可能性有多大,但是很多程序(包括谷歌浏览器)似乎只将它用作复制图像时放在剪贴板上的透明图像格式。

要完全支持透明粘贴,您可能需要同时支持 PNG 和 DIB 格式(考虑到围绕 DIB 的问题和争议,最好按此顺序)。 This answer可能会提供有关筛选剪贴板和解析 PNG 和 DIB 图像的一般方法的更多信息,尽管它是 C# 代码,而不是 Javascript。

关于javascript - 如何在 Javascript 中获得透明的粘贴图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50218144/

相关文章:

windows - 在 .bat 脚本中运行所有命令

javascript - 在网站加载时,如何使用 Javascript 将所有图像动态包装在链接中?

ios - 如何在 xcode 代码中显示图像标题而不是图标?

css - HTML5 图像未与相同 css 正确对齐

javascript - 如何使用 jQuery/JavaScript 默认隐藏可展开的表格单元格,并在标签外部可单击?

windows - 如何避免使用 javafx-maven-plugin 创建可执行文件而无需 Windows 安装程序的警告?

javascript - 如何让 CKEditor 使用 CSS 渲染文本?

c++ - GTK3 :How to receive input value from entry/input box?

javascript - DM'ing 一个特定的用户 ID

javascript:比较两个字符串,跳过不同的字符