【发布时间】:2020-04-29 06:17:18
【问题描述】:
无法将 blob 插入 indexedDB 请协助将 blob 从文件插入 indexedDB :)
代码
<html>
<head>
<title>file to BLOB</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div id="test">
<input id="File" type="file" accept="image/*" capture="user">
</div>
</body>
</html>
<script src="js/idbConn.js"></script>
Javascript
<script>
$(document).ready(function(){
$("#File").change(function(){
const File = this.files[0];
const cvs = document.createElement("canvas");
const optBlob = cvs.toBlob(function(cvsBlob){
let fileURL = URL.createObjectURL(File);
let imgFile = new Image();
let imgFile.src = fileURL;
imgFile.onload = function(){
cvs.width = imgFile.naturalWidth;
cvs.height = imgFile.naturalHeight;
let ctx = cvs.getContext("2d").drawImage(imgFile,0,0);
URL.revokeObjectURL(fileURL);
}
},File.type,0.3);
const data = new Object();
data.blob = optBlob;
let trx = db.transaction(["imgBlobs"],"readwrite").objectStore("imgBlobs").put(data,"test.jpeg");
});
});
</script>
试图直接将文件插入 indexedDB 但 blob 未定义
如果将 cvsBlob 保存在 data.blob 中,则空白图像存储在 indexedDB 中
【问题讨论】:
-
你在
this.files[0];得到的File对象已经是一个Blob(文件接口继承自Blob),不需要在画布上绘制你的图像。 -
优化 blob 我要使用 canvas.toBlob()
-
“优化 blob”? Blob 只是指向内存中二进制数据的指针,无法对其进行优化或反优化。如果您的意思是优化的图像文件,那么我真的想知道您期望什么样的优化。对于文件大小,HTMLCanvas png 压缩是市场上最差的。如果您曾经收到 jpeg 图像,您会破坏它们的尺寸。对于绘制性能,由于它们无论如何都会被解码为原始位图,因此绘制它们甚至不会更快......
标签: javascript html image-processing canvas