Javascript:如何在粘贴事件中从剪贴板访问Hi-DPI/Retina图像?
我有一个粘贴处理程序,它在剪贴板中获取图像并将其上传到服务器。我可以成功访问剪贴板数据,但如果剪贴板图像数据的分辨率高于72ppi,它将被降采样到72ppi 将MacBook视网膜上的屏幕截图放到剪贴板(通过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
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
Command-V
)如果您有任何建议,我们将不胜感激!您应该完全忽略ppi和dpi。唯一重要的是像素尺寸。您是说粘贴的图像在每个尺寸上缩小了一半像素?仅供参考,我相信OSX中有一个设置,可以让您更改屏幕截图的保存方式。这是这可能发生在操作系统层面,这意味着你在这方面可能无能为力。是的,Mac电脑会以144ppi的速度自动截图,然后当我粘贴到浏览器中时,所有内容都会减少一半。如果我从Photoshop复制文档中144ppi的图像,浏览器也会减少采样。因此,为了澄清,当你在“常规”mac电脑和视网膜mac电脑上进行上述操作,上传图像的像素尺寸是多少?视网膜mac电脑的像素尺寸是每个尺寸像素的两倍吗?同样,忽略ppi。我们需要处理实际的像素尺寸。如果你拍摄一张200px 200px的图像并粘贴进去,该图像现在是100px 100px吗?是的,在视网膜mac电脑上,如果截图以200x200px的速度保存到剪贴板,则粘贴到浏览器中时,截图将减半为100x100px。如果粘贴到Photoshop中,截图的大小将达到预期的200x200px。当我在非视网膜Mac上尝试此操作时,Photoshop和浏览器中的实际像素尺寸保持不变。