애니메이션 PNG(Portable Network Graphics)는 애니메이션을 통합하기 위한 PNG 형식의 확장입니다. 애니메이션 GIF와 마찬가지로 APNG 형식은 애니메이션을 표시하는 데 사용됩니다. GIF보다 APNG의 장점은 24비트 투명도를 지원하는 반면 GIF는 8비트만 지원한다는 것입니다. 또한 APNG는 애니메이션 GIF에 비해 부드러운 애니메이션을 제공합니다. 이 기사에서는 이미지 또는 다중 페이지 Tiff에서 애니메이션 PNG(APNG) 이미지를 만들고 C#(또는 VB.NET)을 사용하여 프로그래밍 방식으로 APNG를 애니메이션 GIF로 내보내는 방법을 보여줍니다.
애니메이션 PNG 이미지용 .NET API
Aspose는 .NET Imaging API를 제공하여 C# 또는 VB.NET을 사용하여 애니메이션 PNG를 비롯한 인기 있는 이미지 형식을 생성하거나 조작합니다. .NET용 Aspose.Imaging의 기능을 활용하여 애니메이션 PNG 이미지를 만들거나 내보낼 것입니다. API의 DLL을 다운로드하거나 NuGet을 사용하여 .NET 애플리케이션 내에 설치할 수 있습니다.
PM> Install-Package Aspose.Imaging
C#을 사용하여 이미지에서 애니메이션 PNG 만들기
.NET용 Aspose.Imaging을 사용하면 사용자 지정 애니메이션 및 프레임 지속 시간을 설정하여 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
}
소스 티프
애니메이션 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 이미지 조작에 대해 자세히 알아볼 수 있습니다.