javascript - 将背景图像渲染到 Canvas

标签 javascript css html html5-canvas

我有一个 DIV 容器,其中图像设置为背景图像(由 url 指定)。有什么方法可以将此背景图像重绘到 Canvas 中(无需重新联系或从服务器重新下载——因为内容图像是一次性显示的)?

最佳答案

是的。可以获取背景图片的URL,请求图片文件为Blob , 创建一个 <img>元素,设置 srcBlob URL响应,在 load创建事件 img元素调用 .drawImage()img作为第一个参数。

可以缓存背景图像,具体取决于浏览器设置。如果浏览器没有缓存图片,可以先请求图片,然后同时设置css background-image<canvas>使用单个请求。

您可以使用 fetch()XMLHttpResponse()请求background-image url() , FileReader() , FileReader.prototype.readAsDataURL()设置 src<img>.resultFileReaderload事件。

您还可以使用 URL.createObjectURL()创建一个 Blob URL来自 response Blob . URL.revokeObjectURL()撤销 Blob URL .

检查 Network选项卡位于 DevToolsDeveloper Tools , 图像应该被检索

(from cache)    

#bg {
  width:50px;
  height:50px;
  background-image:url(http://placehold.it/50x50);
}
<div id="bg"></div>
<br>
<canvas id="canvas" width="50px" height="50px"></canvas>
<script>
  window.onload = function() {
    var bg = document.getElementById("bg");
    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    var img = new Image;
    img.width = canvas.width;
    img.height = canvas.height;
    img.onload = (e) => ctx.drawImage(e.target,0,0);
    var background = getComputedStyle(bg).getPropertyValue("background-image");
    var src = background.replace(/^url|["()]/g, "");
    var reader = new FileReader;
    reader.onload = (e) => img.src = e.target.result;
    fetch(src)
    .then(response => response.blob())
    .then(blob => {
      reader.readAsDataURL(blob);   
      // const url = URL.createObjectURL(blob);  img.src = url;
    })
  }
  </script>

关于javascript - 将背景图像渲染到 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40552870/

相关文章:

javascript - KML - Google Maps API - 添加县名

javascript - 表单帖子上的 asp.net mvc 编码

javascript - 有没有通用的方法来 "close"一个 <select> 下拉菜单(不是 .blur() )?

javascript - 这两个 XPath 表达式有什么区别?

javascript - 如何获取 HTML5 textarea 的字符串表示形式,将换行符转换为换行符?

javascript - 刷新页面后本地存储项

javascript - 通过 document.write() 添加一个简单的静态 &lt;style&gt; 标签的原因是什么?

javascript - 向下滚动时,粘性标题过渡变得跳跃和丑陋

javascript - 有没有一种简单的方法可以在 JavaScript 中将文本转换为 HTML?

javascript - HTTP方法差异