Javascript 如何在Windows8Metro应用程序中将html5画布保存为图像文件?

Javascript 如何在Windows8Metro应用程序中将html5画布保存为图像文件?,javascript,canvas,windows-8,microsoft-metro,Javascript,Canvas,Windows 8,Microsoft Metro,我认为myImage将图像字节编码为png格式 现在,如何将myImage保存为文件(在images文件夹中)?而不是使用.toDataUrl,您需要使用.msToBlob: var myImage = canvas.toDataURL("image/png"); 然后,您需要将其写入磁盘: var blob = canvas.msToBlob(); 在“应用程序应用程序数据”文件夹中,您现在可以将映像写入磁盘 如果您希望将其放置在其他位置,例如“我的图片”等,则只需使用其他存储文件夹之一即

我认为
myImage
将图像字节编码为png格式
现在,如何将
myImage
保存为文件(在images文件夹中)?

而不是使用
.toDataUrl
,您需要使用
.msToBlob

var myImage = canvas.toDataURL("image/png");
然后,您需要将其写入磁盘:

var blob = canvas.msToBlob();
在“应用程序应用程序数据”文件夹中,您现在可以将映像写入磁盘

如果您希望将其放置在其他位置,例如“我的图片”等,则只需使用其他存储文件夹之一即可。请参见示例。请注意,要访问图片库,您需要将该功能添加到清单中(只是VS中package.appxmanifest编辑器中的一个复选框)


对于更复杂的输出文件操作,还有许多其他成像选项。有关代码,请参见。您需要使用
.msToBlob
,而不是使用
.toDataUrl

var myImage = canvas.toDataURL("image/png");
然后,您需要将其写入磁盘:

var blob = canvas.msToBlob();
在“应用程序应用程序数据”文件夹中,您现在可以将映像写入磁盘

如果您希望将其放置在其他位置,例如“我的图片”等,则只需使用其他存储文件夹之一即可。请参见示例。请注意,要访问图片库,您需要将该功能添加到清单中(只是VS中package.appxmanifest编辑器中的一个复选框)


对于更复杂的输出文件操作,还有许多其他成像选项。查看代码。

我发现这是简单图像示例中最有用的代码。它允许您编码为PNG或JPG,而不仅仅是转储画布数据

var output;
var input;
var outputStream;

Windows.Storage.ApplicationData.current.localFolder.createFileAsync("yourFile", 
          Windows.Storage.CreationCollisionOption.replaceExisting).
    then(function(file) {
        return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
    }).then(function(stream) {
        outputStream = stream;
        output = stream.getOutputStreamAt(0);
        input = blob.msDetachStream();
        return Windows.Storage.Streams.RandomAccessStream.copyAsync(input, output);
    }).then(function() {
        return output.flushAsync();
    }).done(function() {
        input.close();
        output.close();
        outputStream.close();
    });

我发现这是来自简单图像示例的最有用的代码。它允许您编码为PNG或JPG,而不仅仅是转储画布数据

var output;
var input;
var outputStream;

Windows.Storage.ApplicationData.current.localFolder.createFileAsync("yourFile", 
          Windows.Storage.CreationCollisionOption.replaceExisting).
    then(function(file) {
        return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
    }).then(function(stream) {
        outputStream = stream;
        output = stream.getOutputStreamAt(0);
        input = blob.msDetachStream();
        return Windows.Storage.Streams.RandomAccessStream.copyAsync(input, output);
    }).then(function() {
        return output.flushAsync();
    }).done(function() {
        input.close();
        output.close();
        outputStream.close();
    });