如何将图像存储和检索到localStorage?

埃德·琼斯

以为我有这个,但没有。目标是:拍摄照片(保险卡),将其保存在本地,然后再取回。

// Get a reference to the image element
var elephant = document.getElementById("SnapIt_mobileimage_5");

var imgCanvas = document.createElement("canvas"),
imgContext = imgCanvas.getContext("2d");

// Make sure canvas is as big as the picture
imgCanvas.width = elephant.width;
imgCanvas.height = elephant.height;

// Draw image into canvas element

imgContext.drawImage(elephant, 0, 0, elephant.width, elephant.height );
 console.log( 'Did that' );
// Get canvas contents as a data URL
var imgAsDataURL = imgCanvas.toDataURL("data:image/jpg;base64,");

// Save image into localStorage
try {
localStorage.setItem("elephant", imgAsDataURL);
}
catch (e) {
console.log("Storage failed: " + e);
}; 

//Did it work?
var pic = localStorage.getItem("elephant");

console.log( elephant );
console.log( pic );

每一步成功,最终输出为:

<img id="SnapIt_mobileimage_5" class=" SnapIt_mobileimage_5" name="mobileimage_5" dsid="mobileimage_5" src="files/views/assets/image/IMG_0590.JPG">
 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA

在新页面上,当我问

var policy_shot = localStorage.getItem( 'elephant' );
console.log( policy_shot );

$('#TestScreen_mobileimage_1').src = policy_shot ;

它记录二进制文件:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUg ....

但是图像没有出现。

  1. 有没有更简单的方法?
  2. 为什么getItem(二进制)的前面是data:image / png; 而不是data:image / jpg?
  3. 这就是为什么它不显示,还是我做错了其他事情吗?
用户名

1)这是在本地将图像转换成字符串的唯一方法(不包括FileReader加载的文件,请参见下文)。(可选)您需要使用服务器来执行此操作。

2)要获取JPEG图像,您需要使用如下参数:

var datauri = imgCanvas.toDataURL("image/jpeg", 0.5); //0.5 = optional quality

不要data:...在参数中使用,因为那将是无效的,并且会产生默认的PNG,如您在结果中看到的那样。toDataURL()只能采用一种类型,即。image/pngimage/jpeg等等。

3)

外部档案

如果您的图像是从其他来源(方案,服务器...)加载的,或者是通过使用本地引用的文件(file:///my/path/等等)加载的,则CORS会启动,并会阻止您创建data-uri,即:图像为空(因此不可见)。

对于外部服务器,您可以通过提供crossOrigin属性来请求跨域使用图像的权限

<img src="http://extrernalserver/...." crossOrigin="anonymous" />

img.crossOrigin = 'anonymous';在设置src

但是,由服务器决定是允许还是拒绝该请求。

如果仍然无法正常工作,则需要通过代理服务器加载图像(例如,服务器上的一个页面,该页面可以从外部加载图像并从您自己的服务器提供图像)。

或者,如果您有权访问服务器的配置,则可以添加特殊的访问允许标头(Access-Control-Allow-Origin: *,有关更多详细信息,请参见下面的链接)。

CORS(跨域资源共享)是一种安全机制,只能通过其他方式解决。

本地文件

对于本地文件,你需要使用FileReader-这可以变成是一个优势,因为FileReader带有一个方便的方法:readAsDataURL()这使您可以直接将数据文件“上传”为数据uri,而无需通过画布。

在此处查看示例:https :
//developer.mozilla.org/en-US/docs/Web/API/FileReader

不幸的是,您不能仅从代码中选择文件-您将需要提供输入元素或放置区,以便用户可以选择他要存储的文件。

结论

如果所有这些步骤都达到了您确实获得图像的程度,则问题可能出在另一端,被截断的字符串太长而无法存储。

您可以通过检查存储字符串前后的长度来验证是否已被剪切:

console.log(imgAsDataURL.length);
... set / get ...
console.log(pic.length);

其他可能性:

  • 图片元素定义不正确。
  • 浏览器中的错误
  • 框架中的错误

(我认为我涵盖了大多数典型的陷阱?)

更新(缺少一个,有点.. ;-p)

OP在框架中找到了一个特定的对象,我将在此包括它以供将来参考:

最后,问题出在$('#TestScreen_mobileimage_1').src = policy_shot ;我正在使用Appery.io而他们不支持.src

它的 $('#TestScreen_mobileimage_1').attr("src", policy_shot ) ;

最后一点:localStorage在存储图像方面非常有限。典型的存储空间为2.5-5 mb。每个存储的char占用2个字节,并且存储一个编码为base-64的data-uri比原始字符大33%-因此空间将很短缺。查看索引数据库,Web SQL或文件API可以找到更好的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将图像存储到文件系统(在Internet上)并存储到数据库的路径?

来自分类Dev

如何将图像中的每个像素作为16位索引存储到色表中?

来自分类Dev

如何将位图图像存储到XML

来自分类Dev

如何将图像存储到jackrabbit并将这些图像传递到HTML页面?

来自分类Dev

如何将存储在CFArrayRef中的CFStringRef值检索到字符串/字符数组*

来自分类Dev

在localStorage中存储和检索

来自分类Dev

如何将多个前置日期存储到localStorage?

来自分类Dev

如何将JSON数据存储和检索到本地存储中?

来自分类Dev

使用localStorage存储和检索PNG时的空白图像

来自分类Dev

nodejs multer将存储的图像检索到客户端

来自分类Dev

如何将图像中的每个像素作为16位索引存储到色表中?

来自分类Dev

如何将日期从C#存储到MS-Access,以及如何检索它?

来自分类Dev

如何将图像存储在矢量中?

来自分类Dev

如何将元素转换为可以从localStorage存储和还原的字符串

来自分类Dev

如何将MVC中的模型类存储到LocalStorage中?

来自分类Dev

jQuery如何将图像源存储到临时内存中并在以后检索

来自分类Dev

如何将数据库中的图像检索到Webform

来自分类Dev

如何将文件存储到MeteorApp?

来自分类Dev

在localStorage中存储和检索

来自分类Dev

如何将图像检索到其源存储在SQL Server数据库中的html表中?

来自分类Dev

如何将图像从collectionviewcell存储到核心数据

来自分类Dev

如何将参数传递和检索到 nodejs 中的 .sh 文件?

来自分类Dev

如何将 .each() 的结果存储到 localStorage 中?

来自分类Dev

如何将图像 blob 从 MySQL 检索到 C# 应用程序中?

来自分类Dev

如何将 arrayList 存储到 Map 'string as key 以及如何检索它..!

来自分类Dev

如何将图像名称从 firebase 存储复制到 firebase 数据库?Javascript 和 Java

来自分类Dev

如何将键和值存储到数组存储?

来自分类Dev

如何将图像文件夹路径存储到 MYSQL 数据库中并通过 PHP 和 XAMPP 在网页中显示图像?

来自分类Dev

如何将图像 URL 从 Firebase Storage 直接检索到图像视图?

Related 相关文章

  1. 1

    如何将图像存储到文件系统(在Internet上)并存储到数据库的路径?

  2. 2

    如何将图像中的每个像素作为16位索引存储到色表中?

  3. 3

    如何将位图图像存储到XML

  4. 4

    如何将图像存储到jackrabbit并将这些图像传递到HTML页面?

  5. 5

    如何将存储在CFArrayRef中的CFStringRef值检索到字符串/字符数组*

  6. 6

    在localStorage中存储和检索

  7. 7

    如何将多个前置日期存储到localStorage?

  8. 8

    如何将JSON数据存储和检索到本地存储中?

  9. 9

    使用localStorage存储和检索PNG时的空白图像

  10. 10

    nodejs multer将存储的图像检索到客户端

  11. 11

    如何将图像中的每个像素作为16位索引存储到色表中?

  12. 12

    如何将日期从C#存储到MS-Access,以及如何检索它?

  13. 13

    如何将图像存储在矢量中?

  14. 14

    如何将元素转换为可以从localStorage存储和还原的字符串

  15. 15

    如何将MVC中的模型类存储到LocalStorage中?

  16. 16

    jQuery如何将图像源存储到临时内存中并在以后检索

  17. 17

    如何将数据库中的图像检索到Webform

  18. 18

    如何将文件存储到MeteorApp?

  19. 19

    在localStorage中存储和检索

  20. 20

    如何将图像检索到其源存储在SQL Server数据库中的html表中?

  21. 21

    如何将图像从collectionviewcell存储到核心数据

  22. 22

    如何将参数传递和检索到 nodejs 中的 .sh 文件?

  23. 23

    如何将 .each() 的结果存储到 localStorage 中?

  24. 24

    如何将图像 blob 从 MySQL 检索到 C# 应用程序中?

  25. 25

    如何将 arrayList 存储到 Map 'string as key 以及如何检索它..!

  26. 26

    如何将图像名称从 firebase 存储复制到 firebase 数据库?Javascript 和 Java

  27. 27

    如何将键和值存储到数组存储?

  28. 28

    如何将图像文件夹路径存储到 MYSQL 数据库中并通过 PHP 和 XAMPP 在网页中显示图像?

  29. 29

    如何将图像 URL 从 Firebase Storage 直接检索到图像视图?

热门标签

归档