从zip中以画布保存图像

时间:2013-03-08 05:33:49

标签: javascript image html5 canvas

我在HTML5中有一个画布,最终可能会成为一个非常长的dataURL(如果他们试图导航到chrome,则足以崩溃)。因此,我正在尝试使用JSZip将图像保存为zip。我尝试了以下两件事:

var zip = new JSZip();
var savable = new Image();
savable.src = canvas.toDataURL();
zip.file("image.png", savable, {base64: true});
var content = zip.generate();
var blobLink = document.getElementById('blob');
blobLink.download = "image.zip";
blobLink.href = window.URL.createObjectURL(zip.generate({type:"blob"}));

这会导致以下错误:

Uncaught TypeError: Object #<HTMLImageElement> has no method 'replace'

我也试过这个:

var zip = new JSZip();
zip.file("image.png", canvas.toDataURL(), {base64: true});
var content = zip.generate();
var blobLink = document.getElementById('blob');
blobLink.download = "image.zip";
blobLink.href = window.URL.createObjectURL(zip.generate({type:"blob"}));

这似乎有效,但是zip中的图片无效。如何正确保存图像?

1 个答案:

答案 0 :(得分:17)

您正在生成数据uri,它在实际的base64数据data:[<MIME-type>][;charset=<encoding>][;base64],<data>之前具有架构,mime-type等。您必须先删除数据之前的所有内容然后再使用它。

zip.file("image.png", savable.src.substr(savable.src.indexOf(',')+1), {base64: true});