我有一个图像设置为背景图像(由url指定)的DIV容器。有没有办法如何将这个背景图像重新绘制到画布中(无需重新联系或从服务器重新下载 - 因为内容图像一次显示)?将背景图像渲染到画布
0
A
回答
1
是的。您可以获取背景图像的URL,请求图像文件为Blob
,创建<img>
元素,设置src
为Blob URL
的响应,在load
创建的事件img
元素调用.drawImage()
与img
作为第一个参数。
根据浏览器设置,可以缓存背景图像。如果图像未在浏览器中缓存,则可以先请求图像,然后使用单个请求设置css
background-image
和<canvas>
。
您可以使用fetch()
或XMLHttpResponse()
要求background-image
url()
,,FileReader.prototype.readAsDataURL()
在load
事件来设置的<img>
src
到FileReader
.result
。
您也可以使用URL.createObjectURL()
创建一个Blob URL
response
Blob
。 URL.revokeObjectURL()
撤销Blob URL
。
检查Network
选项卡DevTools
或Developer 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>
相关问题
- 1. 坏IE11 SVG渲染 - 背景图像
- 2. Rails SCSS背景图像不渲染
- 3. Android ViewFlipper动画不渲染背景?
- 4. 调整画布的背景图像 - Fabricjs
- 5. 设置画布的背景图像
- 6. 在画布上绘制背景图像
- 7. wpf动态画布背景图像
- 8. 透明图像背景HTML5画布
- 9. 渲染2张图像,顶部图像背景色透明
- 10. 在渲染到画布上之前模糊图像
- 11. IE6不渲染格背景
- 12. C渲染面板背景#
- 13. 将图像带到背景
- 14. Safari在iPad上渲染背景色作为背景图像的边框
- 15. 动画UIButton背景图像
- 16. jQuery背景图像动画
- 17. 将画布对象保存为图像 - 黑色背景
- 18. 如何将上传的图像设置为画布背景?
- 19. 如何将画布背景图像另存为Json
- 20. 如何将背景图像设置为画布
- 21. CSS:在另一个图像(或画布)内的背景图像
- 22. 在画布上渲染位图[Java-Android]
- 23. 加载图像到织物画布背景
- 24. 野生动物园渲染图像背景加载黑色
- 25. 在rails 4.1中的背景图像渲染问题
- 26. CoreGraphics在图像从OpenGL的渲染具有黑色背景
- 27. wp7上的背景图像渲染问题
- 28. 背景图像不会渲染Ruby on Rails应用程序
- 29. 背景图像渲染出XAML事件屏幕
- 30. IE浏览器不能正确渲染PNG背景图像
请问这个方法接触服务器?或者浏览器在内部处理它?我试图得到的图像是根据请求生成的 –
这取决于浏览器设置。通常,浏览器不会发送另一个缓存图像请求。如果禁用了缓存,则可以使用来自单个请求的响应将背景图像和图像设置为“canvas”。 _“我想要得到的图像是根据请求生成的”_图像是如何请求的?你可以包括'html','''你试图解决问题的问题? – guest271314
我正在显示仅使用背景图像显示图像的第三方页面(它们从不使用IMG标签)。我的目标是下载所有图像(在画布的帮助下),但我无法承担重新连接服务器,因为它会返回另一个图像(对于相同的图像URL;每个显示的图像都有唯一的url,但重新连接服务器会生成新图像) –