这篇文章主要介绍了跨域图片资源权限(CORS enabled image)的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

HTML 规范文档为 images 引入了 crossorigin 属性, 通过设置适当的头信息 CORS , 可以从其他站点加载 img 图片, 并用在 canvas 中,就像从当前站点(current origin)直接下载的一样.

crossorigin 属性的使用细节, 请参考CORS settings attributes.

什么是 “被污染的(tainted)” canvas?

尽管没有CORS授权也可以在 canvas 中使用图像, 但这样做就会污染(taints)画布。 只要 canvas 被污染, 就不能再从画布中提取数据, 也就是说不能再调用 toBlob(), toDataURL() 和 getImageData() 等方法, 否则会抛出安全错误(security error).

这实际上是为了保护用户的个人信息,避免未经许可就从远程web站点加载用户的图像信息,造成隐私泄漏。

(译者注: 如果用户登陆过QQ等社交网站, 假若不做保护 ,则可能打开某个网站后,该网站利用 canvas 将用户的图片信息获取,上传,进而引露.)

示例: 从其他站点保存图片

首先, 图片服务器必须设置相应的 Access-Control-Allow-Origin 响应头。添加 img 元素的 crossOrigin 属性来请求头。比如Apache服务器,可以拷贝HTML5 Boilerplate Apache server configs 中的配置信息, 来进行回应:

<IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
    <FilesMatch "\.(cur|gif|ico|jpe?g|png|svgz?|webp)$">
        SetEnvIf Origin ":" IS_CORS
        Header set Access-Control-Allow-Origin "*" env=IS_CORS
    </FilesMatch>
    </IfModule>
</IfModule> 

这些设置生效之后, 就可以像本站的资源一样, 保存其他站点的图片到 DOM存储 之中(或者其他地方)。

var img = new Image,
    canvas = document.createElement("canvas"),
    ctx = canvas.getContext("2d"),
    src = "http://example.com/image"; // 具体的图片地址

img.crossOrigin = "Anonymous";

img.onload = function() {
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage( img, 0, 0 );
    localStorage.setItem( "savedImageData", canvas.toDataURL("image/png") );
}
img.src = src;
//  确保缓存的图片也触发 load 事件
if ( img.complete || img.complete === undefined ) {
    img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
    img.src = src;
}

浏览器兼容性

Desktop

FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafariBasic support138No supportNo support?

Mobile

FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileBasic support?????

另请参见

Chrome:在WebGL中使用跨域图片

HTML规范-crossorigin属性

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持爱安网。

最新资讯
强烈建议苹果收购戴森,连iCar的工业设计都有着落了

强烈建议苹果收购戴森

为了延续统一的设计风格,实现平稳有序过渡,我们强烈建议
德国将Facebook旗下加密货币Libra视为对欧元的风险

德国将Facebook旗下加

德国将Facebook旗下加密货币Libra视为对欧元的风险。
直击|趣头条米读小说今日起整改完善 暂停新内容引入

直击|趣头条米读小说

趣头条发布公告称,从今日起,米读小说App将进行整改完善,
直击|瑞幸咖啡宣布全国门店破3000家 今年目标4500家

直击|瑞幸咖啡宣布全

瑞幸咖啡(luckin coffee)今日宣布,第3000家门店杭州火车
郭台铭参选失利 专家:仍掌握着鸿海实权

郭台铭参选失利 专家:

有不具名会计师分析,郭台铭即便卸下董事长职位,无论从所
阿里股东大会批准拆股方案 10%反对CEO张勇选董事

阿里股东大会批准拆股

阿里巴巴提交给美国证券交易委员会(SEC)的一份文件显示
最新文章
前端浏览器字体小于12px的解决办法

前端浏览器字体小于12

这篇文章主要给大家介绍了关于前端浏览器字体小于12px
详解Web前端性能优化详解之资源合并与压缩

详解Web前端性能优化

这篇文章主要介绍了详解Web前端性能优化详解之资源合
element.style内联样式的修改方法教程

element.style内联样

这篇文章主要给大家介绍了关于element.style内联样式
图文实操详解前端处理小图标的那些解决方案

图文实操详解前端处理

在前端日常开发中,小图标是必不可少的,我们该如何高效的
深入理解::before/:before和::after/:after的使用

深入理解::before/:be

之前在网上总是可以看到::before :before ::after :af
利用.htaccess实现禁止某个IP访问网站的方法

利用.htaccess实现禁

这篇文章主要给大家介绍了关于利用.htaccess实现禁止