如何将图像保存到本地存储并将其显示在下一页上?

2022-08-30 01:41:53

所以,基本上,我需要上传一个图像,将其保存到localStorage,然后在下一页上显示它。

目前,我已上传 HTML 文件:

<input type='file' id="uploadBannerImage" onchange="readURL(this);" />

它使用此功能在页面上显示图像

function readURL(input) 
{
    document.getElementById("bannerImg").style.display = "block";

    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            document.getElementById('bannerImg').src =  e.target.result;
        }

        reader.readAsDataURL(input.files[0]);
    }
}

图像会立即显示在页面上,供用户查看。然后要求他们填写表格的其余部分。这部分工作得很好。

表单完成后,他们按“保存”按钮。按下此按钮后,我将所有表单输入保存为字符串。我需要一种方法将图像另存为项目。localStoragelocalStorage

保存按钮还会将他们定向到新页面。此新页面将在表格中显示用户数据,图像位于顶部。

如此简单明了,我需要在按下“保存”按钮后保存图像,然后从中借出下一页上的图像。localStoragelocalStorage

我在 moz://a HACKS上找到了一些解决方案,例如这个小提琴和这篇文章。

虽然我仍然对它的工作原理感到非常困惑,但我只需要一个简单的解决方案。基本上,我只需要在按下“保存”按钮后通过找到图像,然后处理并保存图像。getElementByID


答案 1

对于谁也需要解决这个问题:

首先,我用 抓取我的图像,并将图像另存为Base64。然后,我将 Base64 字符串保存为我的值。getElementByIDlocalStorage

bannerImage = document.getElementById('bannerImg');
imgData = getBase64Image(bannerImage);
localStorage.setItem("imgData", imgData);

下面是将图像转换为 Base64 字符串的函数:

function getBase64Image(img) {
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;

    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);

    var dataURL = canvas.toDataURL("image/png");

    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}

然后,在我的下一页上,我创建了一个空白的图像,如下所示:src

<img src="" id="tableBanner" />

当页面加载时,我直接使用接下来的三行从中获取Base64字符串,并将其应用于具有我创建的空白的图像:localStoragesrc

var dataImage = localStorage.getItem('imgData');
bannerImg = document.getElementById('tableBanner');
bannerImg.src = "data:image/png;base64," + dataImage;

在相当多的不同浏览器和版本中对其进行了测试,它似乎运行良好。


答案 2

我在localStorage JQueryImageCaching Usage中写了一个2,2kb的保存图像库:

<img data-src="path/to/image">
<script>
    $('img').imageCaching();
</script>