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();
});