【发布时间】:2018-01-29 16:59:45
【问题描述】:
我正在存储 base64 编码的图像,目前我只能创建一个代码(我正在尝试创建两个,但似乎第二个被覆盖了)。我不了解画布绘图的总体概念,所以我相信这是我尝试解决此问题时的问题根源。
当前行为:将相同的 DataUrl 存储在本地存储中两次。它确实记录了正确的信息。 favicon-green 正在被存储,而不是红色
如何使用画布对多个 base64 图像进行编码?
html:
<head>
...
<link id="favicon" rel="icon" src="/assets/favicon-red-16x16.ico.png">
</head>
<body>
...
<!-- hidden images to store -->
<img id="favicon-green" rel="icon" src="/assets/favicon-green-16x16.ico.png" width="16" height="16" />
<img id="favicon-red" rel="icon" src="/assets/favicon-red-16x16.ico.png" width="16" height="16" />
...
</body>
js:
// cache images
function storeImages() {
// my sorry attempt to create two canvas elements for two image encodings
var canvasGreen = document.createElement('canvas');
var canvasRed = document.createElement('canvas');
// painting both images
var ctxGreen = canvasGreen.getContext('2d');
var ctxRed = canvasRed.getContext('2d');
// getting both images from DOM
var favGreen = document.getElementById('favicon-green');
var favRed = document.getElementById('favicon-red');
// checking if images are already stored
var base64Green = localStorage.getItem('greenFavicon');
var base64Red = localStorage.getItem('redFavicon');
console.log('storing...')
if (base64Green == null && window.navigator.onLine || base64Red == null && window.navigator.onLine) {
ctxGreen.drawImage(favGreen, 0, 0);
ctxRed.drawImage(favRed, 0, 0);
// getting images (the DataUrl is currently the same for both)
base64Green = canvasGreen.toDataURL();
base64Red = canvasRed.toDataURL();
localStorage.setItem('greenFavicon', base64Green);
localStorage.setItem('redFavicon', base64Red);
console.log("are they equal : ", base64Green == base64Red); // returns true
}
}
storeImages();
【问题讨论】:
-
它有什么作用?它会打印您的控制台日志吗?你做了什么调试?它是否包含在您的 if 语句中?它会引发任何控制台错误吗?
-
没有错误,它将相同的DataUrl存储在本地存储中两次。它确实记录了正确的信息。 favicon-green 正在被存储,而不是红色(更新的问题)
标签: javascript canvas base64 local-storage data-url