huiyadanli / PasteEx

:clipboard: Paste As File 把剪贴板的内容直接粘贴为文件
GNU General Public License v3.0
1.33k stars 118 forks source link

为什么这张图粘贴为文件比实际图片大小要大1m呢? #27

Closed cooper1x closed 5 years ago

cooper1x commented 5 years ago

http://www.lol-wallpapers.com/wp-content/uploads/2018/11/Classic-Neeko-Splash-Art-HD-4k-Wallpaper-Background-Official-Art-Artwork-League-of-Legends-lol.jpg 网页中拖拽到本地文件夹,是2m,右键复制图片粘贴为文件是2.99m。 比较好奇为什么会有这个差异

huiyadanli commented 5 years ago

其实不止是这张图片,你当前打开浏览器复制的所有图片(gif格式除外),用 PasteEx 保存的图像都是有差异的。

原因: 一般浏览器在复制操作后需要按照剪贴板的标准(CF_BITMAP、CF_DIB、CF_DIBV5等)写入图片的相关信息,包括透明通道等内容。

然后再从剪贴板中读取图像数据保存为 jpg、png 格式的图片,这两步转换都会造成图像大小的差异。 jpg 在生成图片文件的时候还涉及到有损压缩,我把压缩品质调整的比较高,所以一般 jpg 图像用 PasteEx 保存体积会变大。

当然还有一些浏览器比如 Edge ,在复制图片的时候会直接把文件信息存储进去,这时候使用 PasteEx 保存图片的时候,是直接复制的文件,并没有从剪贴板读取图像数据再保存,此时图像大小是不会有变化的。这时候你其实可以不使用 PasteEx ,Ctrl + V 直接能够粘贴图片。

参考资料: https://docs.microsoft.com/zh-cn/windows/desktop/dataxchg/clipboard-formats https://docs.microsoft.com/zh-cn/windows/desktop/dataxchg/standard-clipboard-formats

cooper1x commented 5 years ago

原来如此,Edge那个试了下,果然是一样大小的。 另外刚刚试了下canvas生成的一张大图,可能有30m的样子,我浏览器复制后,粘贴到本地卡了几分钟都没动,这个是不是可以优化下呢?

huiyadanli commented 5 years ago

这么大的图片我倒是没有测试过,回头有时间我测试优化下

huiyadanli commented 5 years ago

尝试了下27MB的图片进行粘贴为文件,的确有点慢,大约10几秒才弹出主界面。不过在使用方面应该没有问题。

下一个大版本可能会改成异步解析剪切板,优先显示界面。