PNG động(Đồ họa mạng di động) là phần mở rộng của định dạng PNG để kết hợp hoạt ảnh. Cũng giống như ảnh GIF động, định dạng APNG được sử dụng để trình bày hoạt ảnh. Một lợi thế của APNG so với GIF là nó hỗ trợ độ trong suốt 24 bit trong khi GIF chỉ hỗ trợ 8 bit. Hơn nữa, APNG cung cấp hình ảnh động mượt mà hơn so với GIF động. Trong bài viết này, tôi sẽ chỉ cho bạn cách tạo hình ảnh PNG (APNG) động từ một hình ảnh hoặc Tiff nhiều trang và xuất APNG sang GIF động theo chương trình bằng C# (hoặc VB.NET).

API .NET cho hình ảnh PNG động

Aspose cung cấp .NET Imaging API để tạo hoặc thao tác với các định dạng hình ảnh phổ biến bao gồm PNG động bằng C# hoặc VB.NET. Chúng ta sẽ tận dụng khả năng của Aspose.Imaging for .NET để tạo hoặc xuất hình ảnh động PNG. Bạn có thể tải xuống DLL của API hoặc cài đặt nó trong ứng dụng .NET của mình bằng NuGet.

PM> Install-Package Aspose.Imaging

Tạo PNG động từ hình ảnh bằng C#

Aspose.Imaging for .NET cho phép bạn tạo PNG động từ hình ảnh một trang chẳng hạn như PNG bằng cách đặt hoạt ảnh tùy chỉnh và thời lượng khung. Sau đây là các bước để thực hiện thao tác này.

Mẫu mã sau đây cho biết cách tạo PNG động (APNG) từ hình ảnh PNG bằng C#.

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

        // thêm khung đầu tiên
        apngImage.AddFrame(sourceImage, FrameDuration);

        // thêm khung trung gian
       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);
        }

        // thêm khung cuối cùng
        apngImage.AddFrame(sourceImage, FrameDuration);

        apngImage.Save();
    }
}

Tạo PNG động từ Tiff nhiều trang bằng C#

Bạn cũng có thể sử dụng tệp Tiff nhiều trang để tạo PNG động bằng cách đặt thời gian khung hình mong muốn. Sau đây là các bước để tạo PNG động từ tệp Tiff.

Mẫu mã sau đây cho biết cách tạo PNG động từ tệp Tiff bằng C#.

// Ví dụ 4. Xuất sang định dạng tệp APNG từ định dạng không hoạt hình khác
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;

using (Image image = Image.Load("img4.tif")) {
    // Thiết lập thời lượng khung hình mặc định
    image.Save("img4.tif.500ms.png", new ApngOptions() { DefaultFrameTime = 500 }); // 500 ms
    image.Save("img4.tif.250ms.png", new ApngOptions() { DefaultFrameTime = 250 }); // 250 ms
}

Nguồn Tiff

Nguồn Tiff

PNG động

TIFF sang PNG động

Xuất PNG động sang GIF động bằng C#

Bạn cũng có thể xuất hình ảnh PNG động sang GIF động tương đương. Sau đây là các bước để xuất APNG sang GIF.

Mẫu mã sau đây cho biết cách xuất PNG động sang GIF bằng C#.

using System.Diagnostics;
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.FileFormats.Apng;

using (Image image = Image.Load("elephant.png")) {
    // Kiểm tra loại hình ảnh được tải
    Debug.Assert(image is ApngImage);
    // Lưu vào cùng một định dạng
    image.Save("elephant_same_format.png");
    // Xuất sang định dạng hoạt hình khác
    image.Save("elephant.png.gif", new GifOptions());
}

Nguồn Hoạt hình PNG

Hình ảnh PNG động

GIF động

PNG động sang GIF C#

Sự kết luận

Trong bài viết này, bạn đã học cách tạo PNG động từ các nguồn khác nhau bằng C#. Hướng dẫn từng bước và mẫu mã trình bày cách tạo PNG động từ PNG một trang và Tiff nhiều trang cũng như xuất PNG động sang GIF động bằng C#. Bạn có thể tìm hiểu thêm về thao tác hình ảnh APNG bằng cách sử dụng tài liệu của API.

Xem thêm