JavaScript Windows 8 アプリケーションがあり、たくさんのキャンバスをアニメーション GIF に変換する必要があります。これが私がこれまでに持っているものです:
次のように(javascriptで)1つのキャンバスを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();
}
ただし、これは 1 つのキャンバスを 1 つの gif として保存するだけです。gif にフレームを追加するにはどうすればよいですか? GifEncoder
名前空間にクラスがありSystem.Media.Imaging
ますが、WinRT .Net フレームワークには含まれていないようです。どんな助けでも大歓迎です。