Javascript:如何在粘贴事件中从剪贴板访问Hi-DPI/Retina图像?

Javascript:如何在粘贴事件中从剪贴板访问Hi-DPI/Retina图像?,javascript,image,retina-display,retina,Javascript,Image,Retina Display,Retina,我有一个粘贴处理程序,它在剪贴板中获取图像并将其上传到服务器。我可以成功访问剪贴板数据,但如果剪贴板图像数据的分辨率高于72ppi,它将被降采样到72ppi 将MacBook视网膜上的屏幕截图放到剪贴板(通过Command-Control-Shift-3)时,这尤其令人恼火。图像的剪贴板数据为144ppi,这是粘贴到Photoshop时显示的ppi。但是,当我粘贴到浏览器时,图像的采样减少了一半 我在Google上搜索了粘贴日,试图找到一个解决方案,但没有成功。我假设下采样是通过.getAsFi

我有一个粘贴处理程序,它在剪贴板中获取图像并将其上传到服务器。我可以成功访问剪贴板数据,但如果剪贴板图像数据的分辨率高于72ppi,它将被降采样到72ppi

将MacBook视网膜上的屏幕截图放到剪贴板(通过
Command-Control-Shift-3
)时,这尤其令人恼火。图像的剪贴板数据为144ppi,这是粘贴到Photoshop时显示的ppi。但是,当我粘贴到浏览器时,图像的采样减少了一半

我在Google上搜索了粘贴日,试图找到一个解决方案,但没有成功。我假设下采样是通过.getAsFile()方法进行的

以下是代码的简化版本:

$('html').bind('paste', function(e) {
  e.preventDefault();
  var item = (e.clipboardData || e.originalEvent.clipboardData).items[0];
  var type = item.type.split('/').shift();
  if (type == "image"){
    var file = item.getAsFile();
    var blob = URL.createObjectURL(file); // Blob
    window.open(blob);
  }
});
下面是一个JSFIDLE:

http://jsfiddle.net/zd5pX/1/
要在视网膜计算机上重新设置问题,请执行以下操作:

  • 在剪贴板上截图
    Command-Control-Shift-3
  • 单击JSFIDLE中的HTML窗格
  • 粘贴(
    Command-V
  • 将出现一个新窗口,显示粘贴的图像
  • 现在打开Photoshop,创建一个新文档,然后再次粘贴
  • 请注意浏览器和Photoshop的图像分辨率和大小不同

  • 如果您有任何建议,我们将不胜感激!

    您应该完全忽略ppi和dpi。唯一重要的是像素尺寸。您是说粘贴的图像在每个尺寸上缩小了一半像素?仅供参考,我相信OSX中有一个设置,可以让您更改屏幕截图的保存方式。这是这可能发生在操作系统层面,这意味着你在这方面可能无能为力。是的,Mac电脑会以144ppi的速度自动截图,然后当我粘贴到浏览器中时,所有内容都会减少一半。如果我从Photoshop复制文档中144ppi的图像,浏览器也会减少采样。因此,为了澄清,当你在“常规”mac电脑和视网膜mac电脑上进行上述操作,上传图像的像素尺寸是多少?视网膜mac电脑的像素尺寸是每个尺寸像素的两倍吗?同样,忽略ppi。我们需要处理实际的像素尺寸。如果你拍摄一张200px 200px的图像并粘贴进去,该图像现在是100px 100px吗?是的,在视网膜mac电脑上,如果截图以200x200px的速度保存到剪贴板,则粘贴到浏览器中时,截图将减半为100x100px。如果粘贴到Photoshop中,截图的大小将达到预期的200x200px。当我在非视网膜Mac上尝试此操作时,Photoshop和浏览器中的实际像素尺寸保持不变。