在 Firefox 或 chrome 中获取 <img> 二进制文件而不发出新请求 [重复]

Posted

技术标签:

【中文标题】在 Firefox 或 chrome 中获取 <img> 二进制文件而不发出新请求 [重复]【英文标题】:get <img> binary in firefox OR chrome without making a new request [duplicate] 【发布时间】:2016-06-17 20:20:41 【问题描述】:

如何从已加载的 &lt;img&gt; 元素中获取二进制文件,在 firefox 或 chrome 中(我可以使用任何一种),而无需发出新请求来获取图像的新副本? (正常的解决方案是new XMLHttpRequest 来获取新副本)这不是性能问题,我绝对不能再次请求获取图像的副本,我必须从缓存中加载它,而不提醒原始网站。我可以使用 javascript、npapi 或其他任何东西,只是不知道从哪里开始

【问题讨论】:

您可以查看这个答案 - ***.com/questions/934012/get-image-data-in-javascript 会有帮助吗? @nstoitsev 天哪,是的! - 我猜你可以把它作为答案发布 @nstoitsev per meta.***.com/questions/295672/… ,您可能可以复制代码以获得答案 我不知道。您的问题与我喜欢的问题非常相似,仅复制代码不会有问题。将类似的问题标记为这样也很好,因为如果有人偶然发现这个问题,他将能够参加另一个问题的讨论。 很公平,我想有人应该将此标记为重复、可能重复或类似的东西.. 不要指望我这样做,这是我没有获得的“特权” 【参考方案1】:

你可以使用FileReader.readAsBinaryString()

这里是 FileReader 版本,但是toBlob 方法有browser limitation:

var canvas = document.createElement('canvas');
var height = 200;
var width  = 200;
canvas.width  = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
var img = document.getElementById("img001");
ctx.drawImage(img, 0, 0);

canvas.toBlob(function (blob) 
  var reader = new FileReader();

  reader.onloadend = function () 
    console.log(reader.result);
  ;

  reader.readAsBinaryString(blob);
); 

demo

【讨论】:

元素上?如何? var fd=new FileReader();fd.readAsBinaryString(document.getElementsByTagName("img")[0]);:未捕获的 TypeError:无法在“FileReader”上执行“readAsBinaryString”:参数 1 不是“Blob”类型。 FireReader 从浏览器的本地文件系统中读取。要使用它,您需要找到文件在本地缓存的位置,并且没有用于此的 Web API。

以上是关于在 Firefox 或 chrome 中获取 <img> 二进制文件而不发出新请求 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Firefox/Chrome 上打开新标签页或窗口时,如何获得新的浏览器会话?

Chrome 或 Firefox 中的 Web 开发人员模式:如何获取对象的 CSS 完整选择器?

如何使用chrome或firefox在javascript中将console.trace()的结果作为字符串?

拒绝在 chrome 中获取不安全的标题“位置”并且在 Firefox 中没有内容

本地(文件://)网站图标在 Firefox 中工作,而不是在 Chrome 或 Safari 中 - 为啥?

CORS 请求在 Firefox 中中止,而不是在 Chrome 或 IE 中