Animasyonlu PNG (Taşınabilir Ağ Grafikleri), animasyonları birleştirmek için PNG biçiminin bir uzantısıdır. Animasyonlu GIF’ler gibi, animasyonları sunmak için APNG formatı kullanılır. APNG’nin GIF’e göre bir avantajı, 24 bit şeffaflığı desteklerken GIF yalnızca 8 bit’i desteklemesidir. Ayrıca APNG, animasyonlu bir GIF’e kıyasla daha yumuşak bir animasyon sağlar. Bu makalede, size bir görüntüden veya çok sayfalı Tiff’ten animasyonlu PNG (APNG) görüntüleri oluşturmayı ve C# (veya VB.NET) kullanarak programlı olarak APNG’yi animasyonlu GIF’e aktarmayı göstereceğim.

Hareketli PNG Resimleri için .NET API

Aspose, C# veya VB.NET kullanarak animasyonlu PNG dahil olmak üzere popüler görüntü formatlarını oluşturmak veya değiştirmek için kendi .NET Görüntüleme API’sini sunar. Animasyonlu PNG görüntüleri oluşturmak veya dışa aktarmak için Aspose.Imaging for .NET’in yeteneklerinden yararlanacağız. API’nin DLL dosyasını indirebilir veya NuGet kullanarak .NET uygulamanıza yükleyebilirsiniz.

PM> Install-Package Aspose.Imaging

C# kullanarak bir Görüntüden Animasyonlu PNG oluşturun

Aspose.Imaging for .NET, özel animasyonu ve çerçeve süresini ayarlayarak PNG gibi tek sayfalık bir görüntüden animasyonlu bir PNG oluşturmanıza olanak tanır. Aşağıda bu işlemi gerçekleştirmek için adımlar verilmiştir.

Aşağıdaki kod örneği, C# kullanarak bir PNG görüntüsünden animasyonlu bir PNG’nin (APNG) nasıl oluşturulacağını gösterir.

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

        // ilk kareyi ekle
        apngImage.AddFrame(sourceImage, FrameDuration);

        // ara çerçeveler ekle
       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);
        }

        // son kareyi ekle
        apngImage.AddFrame(sourceImage, FrameDuration);

        apngImage.Save();
    }
}

C# kullanarak Çok Sayfalı Tiff’ten Animasyonlu PNG oluşturun

İstenen kare süresini ayarlayarak animasyonlu PNG’yi oluşturmak için çok sayfalı bir Tiff dosyası da kullanabilirsiniz. Aşağıdakiler, bir Tiff dosyasından animasyonlu PNG oluşturma adımlarıdır.

Aşağıdaki kod örneği, C# kullanarak bir Tiff dosyasından animasyonlu PNG’nin nasıl oluşturulacağını gösterir.

// Örnek 4. Diğer animasyonlu olmayan formattan APNG dosya formatına dışa aktarma
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;

using (Image image = Image.Load("img4.tif")) {
    // Varsayılan çerçeve süresinin ayarlanması
    image.Save("img4.tif.500ms.png", new ApngOptions() { DefaultFrameTime = 500 }); // 500 ms
    image.Save("img4.tif.250ms.png", new ApngOptions() { DefaultFrameTime = 250 }); // 250 ms
}

Hareketli PNG

TIFF'den Animasyonlu PNG'ye

Animasyonlu PNG’yi C# kullanarak Animasyonlu GIF’e Aktarın

Animasyonlu bir PNG görüntüsünü eşdeğer bir animasyonlu GIF’e de aktarabilirsiniz. APNG’yi GIF’e dışa aktarma adımları aşağıdadır.

Aşağıdaki kod örneği, C# kullanarak animasyonlu PNG’nin GIF’e nasıl aktarılacağını gösterir.

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

using (Image image = Image.Load("elephant.png")) {
    // Yüklenen görüntünün türünü kontrol etme
    Debug.Assert(image is ApngImage);
    // Aynı formatta kaydet
    image.Save("elephant_same_format.png");
    // Diğer animasyonlu biçime aktar
    image.Save("elephant.png.gif", new GifOptions());
}

Kaynak Hareketli PNG

Hareketli PNG Resim

Animasyonlu GIF

Animasyonlu PNG'den GIF'e C#

Çözüm

Bu makalede, C# kullanarak farklı kaynaklardan animasyonlu bir PNG oluşturmayı öğrendiniz. Adım adım kılavuz ve kod örnekleri, tek sayfalı PNG’den ve çok sayfalı Tiff’ten animasyonlu PNG’nin nasıl oluşturulacağını ve C# kullanılarak animasyonlu PNG’nin animasyonlu bir GIF’e nasıl aktarılacağını gösterdi. API belgelerini kullanarak APNG görüntülerini işleme hakkında daha fazla bilgi edinebilirsiniz.

Ayrıca bakınız