【发布时间】:2015-11-26 16:54:36
【问题描述】:
我正在使用 Electron 构建一个应用程序,主要用于 Mac OS X。用户可以将图像拖放到页面上,页面会使用拖放图像的源路径创建一个 <img>,用户会看到图片。
如果用户在 Retina 显示器上截屏,然后将图像放到页面上,则图像会以两倍大小显示。我需要以某种方式知道以自然尺寸的一半显示此图像。
可能的解决方案我相信如果我检查图像的 DPI,我应该能够可靠地判断图像是否是视网膜。在 Mac 上的 Preview 应用程序中,我可以看到图像是 144 DPI。本质上,如果 DPI 为 144 或更高,那么它就是视网膜,对吧?
在给定图像的情况下,是否有某种方法可以使用 Electron 的 Native Image 或 NodeJS 读取这些数据?
注意: Mac OS X 将屏幕截图作为 PNG 格式,因此没有 exif 数据。
编辑和更新:我相信我可以通过查看 HEX 信息来判断图像的 DPI 是多少。即fs.readFileSync('file.type').toString('hex'),然后对于 PNG 查找 70 48 59 73,如提到的 here,或者对于 JPG,查找 FFD8FFE000104A464946000101,如提到的 here。我现在遇到的问题是当从剪贴板粘贴图像时尝试使用 Electron 的 NativeImage。
如果我从剪贴板粘贴一个 PNG,然后执行nativeImage.toPng().toString('hex'),则输出如下:
89504e470d0a1a0a0000000d49484452000001fc000001680806000000b2a54946000005c249444154789cedd5410dc03010c0b0ae448f3f8a0dc554a9b111e4976766de05005c6d9f0e0000fe67f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f8001060f80010f0014a0204ec5f3e63f20000000049454e44ae426082
我可以在这个字符串的哪里找到 DPI 信息?
编辑和更新 2: 我想知道这是否可能是 Electron 中的错误。当我从预览中复制 144 PPI 的图像并将其粘贴到我的应用程序中,然后将其从我的应用程序中复制并粘贴到新的预览窗口中时,它会更改为 72 PPI。有没有可能 Electron 被剥离了这些信息?
块
应@robertklep 的要求,这里是块的屏幕截图(抱歉,我在我的应用程序中覆盖了复制,所以我现在实际上无法复制文本)。
【问题讨论】:
-
你能提供一些示例图片吗?
-
在 Mac 上截取的任何屏幕截图都可以达到目的。
-
我们不是都坐在 Mac 上 :)
-
这实际上会影响所有剪贴板,至少在 Mac 上是这样。这不是 Electron 的错误或任何可以真正解决的问题。
标签: javascript node.js image electron