我有一个 javascript Windows 8 应用程序,我需要将一堆画布转换为动画 gif。这是我到目前为止所拥有的:
我可以像这样(在 javascript 中)将一个画布转换为 base64 编码的 png:
var base64png = myCanvas.toDataURL()
然后我可以将此编码图像转换为字节数组(在 ac# 类库中):
private byte[] GetBytesFromBase64(string base64)
{
string data = base64.Split(',')[1]; // get everything after comma
return Convert.FromBase64String(data);
}
然后我可以使用这些字节创建一个 gif,并将其保存在磁盘上(同样,在 c# 类库中):
public async void ConvertToGif(string image)
{
// Note: The following line includes methods not shown in the question, but they work
IRandomAccessStream stream = await ConvertToRandomAccessStream(
ConvertToMemoryStream(
GetBytesFromBase64(image)));
var decoder = await BitmapDecoder.CreateAsync(stream);
var pixels = await decoder.GetPixelDataAsync();
var file = await KnownFolders.PicturesLibrary.CreateFileAsync("test.gif", CreationCollisionOption.ReplaceExisting);
var outStream = await file.OpenAsync(FileAccessMode.ReadWrite);
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.GifEncoderId, outStream);
encoder.SetPixelData(
decoder.BitmapPixelFormat,
BitmapAlphaMode.Ignore,
decoder.PixelWidth,
decoder.PixelHeight,
decoder.DpiX,
decoder.DpiY,
ReplaceTransparentWithWhite(pixels));
await encoder.FlushAsync();
outStream.Dispose();
}
但是,这只会将一个画布保存为一个 gif。如何在 gif 中添加帧?命名空间中有一个GifEncoder
类System.Media.Imaging
,但它似乎不包含在 WinRT .Net 框架中。任何帮助,将不胜感激。