Animated PNG(Portable Network Graphics)は、アニメーションを組み込むためのPNG形式の拡張機能です。アニメーションGIFと同様に、APNG形式を使用してアニメーションを表示します。 APNG over GIFの利点は、24ビットの透明度をサポートしているのに対し、GIFは8ビットのみをサポートしていることです。さらに、APNGは、アニメーションGIFと比較してよりスムーズなアニメーションを提供します。この記事では、画像または複数ページのTiffからアニメーションPNG(APNG)画像を作成し、C#(またはVB.NET)を使用してプログラムでアニメーションGIFにAPNGをエクスポートする方法を紹介します。
アニメーションPNG画像用の.NET API
Asposeは、C#またはVB.NETを使用してアニメーションPNGを含む一般的な画像形式を作成または操作するための.NET ImagingAPIを提供しています。 Aspose.Imaging for .NETの機能を活用して、アニメーション化されたPNG画像を作成またはエクスポートします。 APIのDLLをダウンロードするか、NuGetを使用して.NETアプリケーション内にインストールできます。
PM> Install-Package Aspose.Imaging
C#を使用して画像からアニメーションPNGを作成する
Aspose.Imaging for .NETでは、カスタムアニメーションとフレーム期間を設定することにより、PNGなどの単一ページの画像からアニメーション化されたPNGを作成できます。この操作を実行する手順は次のとおりです。
- Image.Load(String)メソッドを使用して、PNG画像をRasterImageオブジェクトにロードします。
- 要件に応じてApngOptionsプロパティを設定します。
- ApngImageクラスを使用して、アニメーションPNGを作成します。
- ApngFrame.AdjustGamma(Single)メソッドを使用して、各フレームのガンマを更新します。
- ApngImage.Save()メソッドを使用してアニメーションPNGを作成します。
次のコードサンプルは、C#を使用してPNG画像からアニメーションPNG(APNG)を作成する方法を示しています。
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.FileFormats.Apng;
const int AnimationDuration = 1000; // 1 s
const int FrameDuration = 70; // 70 ms
using (RasterImage sourceImage = (RasterImage)Image.Load("not_animated.png"))
{
ApngOptions createOptions = new ApngOptions
{
Source = new FileCreateSource("raster_animation.png", false),
DefaultFrameTime = (uint)FrameDuration,
ColorType = PngColorType.TruecolorWithAlpha,
};
using (ApngImage apngImage = (ApngImage)Image.Create(
createOptions,
sourceImage.Width,
sourceImage.Height))
{
int numOfFrames = AnimationDuration / FrameDuration;
int numOfFrames2 = numOfFrames / 2;
apngImage.RemoveAllFrames();
// 最初のフレームを追加
apngImage.AddFrame(sourceImage, FrameDuration);
// 中間フレームを追加する
for (int frameIndex = 1; frameIndex < numOfFrames - 1; ++frameIndex)
{
apngImage.AddFrame(sourceImage, FrameDuration);
ApngFrame lastFrame = (ApngFrame)apngImage.Pages[apngImage.PageCount - 1];
float gamma = frameIndex >= numOfFrames2 ? numOfFrames - frameIndex - 1 : frameIndex;
lastFrame.AdjustGamma(gamma);
}
// 最後のフレームを追加
apngImage.AddFrame(sourceImage, FrameDuration);
apngImage.Save();
}
}
C#を使用してマルチページTiffからアニメーションPNGを作成する
複数ページのTiffファイルを使用して、目的のフレーム時間を設定することにより、アニメーションPNGを作成することもできます。以下は、TiffファイルからアニメーションPNGを作成する手順です。
- Imageクラスのオブジェクト内にTiff画像をロードします。
- Image.Save(string, ImageOptionsBase)メソッドを使用して、TiffをAPNGとして保存します。
次のコードサンプルは、C#を使用してTiffファイルからアニメーションPNGを作成する方法を示しています。
// 例4.他のアニメーション化されていない形式からAPNGファイル形式にエクスポートする
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;
using (Image image = Image.Load("img4.tif")) {
// デフォルトのフレーム期間の設定
image.Save("img4.tif.500ms.png", new ApngOptions() { DefaultFrameTime = 500 }); // 500 ms
image.Save("img4.tif.250ms.png", new ApngOptions() { DefaultFrameTime = 250 }); // 250 ms
}
ソースTiff
アニメーションPNG
C#を使用してアニメーションPNGをアニメーションGIFにエクスポートする
アニメーション化されたPNG画像を同等のアニメーション化されたGIFにエクスポートすることもできます。以下は、APNGをGIFにエクスポートする手順です。
- アニメーション化されたPNGをImageオブジェクトにロードします。
- Image.Save(string, GifOptions())メソッドを使用してAPNGをGIFにエクスポートします。
次のコードサンプルは、C#を使用してアニメーションPNGをGIFにエクスポートする方法を示しています。
using System.Diagnostics;
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.FileFormats.Apng;
using (Image image = Image.Load("elephant.png")) {
// ロードされた画像の種類を確認する
Debug.Assert(image is ApngImage);
// 同じ形式で保存
image.Save("elephant_same_format.png");
// 他のアニメーション形式にエクスポートする
image.Save("elephant.png.gif", new GifOptions());
}
ソースアニメーションPNG
アニメーションGIF
結論
この記事では、C#を使用してさまざまなソースからアニメーションPNGを作成する方法を学びました。ステップバイステップガイドとコードサンプルは、単一ページのPNGと複数ページのTiffからアニメーションPNGを作成する方法と、C#を使用してアニメーションPNGをアニメーションGIFにエクスポートする方法を示しています。 APIのドキュメントを使用して、APNG画像の操作について詳しく知ることができます。