Güncel
Loading...

Gif Oluşturma C#

Merhaba Sevgili okurlar,
Bu yazımda bir consol uygulaması ile istediğimiz resimlerden bir  gif oluşturacağız.
Bu  işi yaparken NGif.dll 'den faydalanacağız. Konsol uygulamamızın Debug->Bin  klasörüne SamplePictures adlı klasör oluşturup örnek resimlerimizi buraya kopyalayalım.Oluşan gif dosyasıda burada bulunacak.



Okurken ne dinlemeli ?
Consol uygulamasını oluşturduktan sonra aşağıdaki kodları yazalım ve inceleyelim.

static void Main(string[] args)
        {
            /* create Gif */
            //you should replace filepath
            string main_filepath = AppDomain.CurrentDomain.BaseDirectory + @"SamplePictures\";
            String[] imageFilePaths = new String[] { main_filepath + "batman.jpg", main_filepath + "superman.jpg", main_filepath + "ironman.jpg", main_filepath + "spiderman.jpg" };
            String outputFilePath = main_filepath+"test.gif";
            AnimatedGifEncoder e = new AnimatedGifEncoder();
            e.Start(outputFilePath);
            e.SetDelay(500);
            //-1:no repeat,0:always repeat
            e.SetRepeat(0);
            for (int i = 0, count = imageFilePaths.Length; i < count; i++)
            {
                e.AddFrame(Image.FromFile(imageFilePaths[i]));
            }

            e.Finish();


Yukarıdaki kod bloğu "BaseDirectory" 'de oluşturduğumuz "SamplePictures" klasöründeki resimlere ulaşabilmek için yollarını alıp bir string array'a atıyor. Bizim örneğimizde resimlerimiz :batman.jpg,superman.jpg şeklinde devam ediyor.  Gifencoder sınıfını kullanarak ,gif 'in yerini işaret ediyoruz. e.Start(outputFilePath); oluşacak olan gif 'in bir resimden diğerine geçiş süresini,oluşturacağı gif in yolunu vb. parametreleri setliyor.

Daha sonra resimler array 'indeki for döngüsü ile her bir resim için bir frame oluşturuyor.Sıra geldi gif'i kaydetmeye.

/* extract Gif */
            string outputPath = main_filepath;
            GifDecoder gifDecoder = new GifDecoder();
            gifDecoder.Read(outputFilePath);

            List<string> temp_imageFilePaths = new List<string>();
            for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
            {
                Image frame = gifDecoder.GetFrame(i);  // frame i

                string framepath = outputPath + Guid.NewGuid().ToString() + ".png";
                frame.Save(framepath, ImageFormat.Png);
                temp_imageFilePaths.Add(framepath);

            }


Yine eklediğimiz Ngif.dll'in Gif decoder sınıfı ile önceden encode ettiğimiz,frame'lerini oluşturduğumuz  gif 'in şimdi frame'lerini  kaydediyoruz. Bu işlem esnasında frame.Save metodu ile SamplePictures klasörüne temp image'ler oluşur. Aşağıdaki kodu oluşan bu temp resimleri silmek için yazdım. 
  //delete temporary files
            for (int i = 0, count = temp_imageFilePaths.Count; i < count; i++)
            {
                FileInfo file = new FileInfo(temp_imageFilePaths[i]);
                if (file.Exists)
                {
                    file.Delete();
                }
            }

            Console.WriteLine("gif is created.");
            Console.ReadLine();

        }

Eğer bu kodu yorum satırına alırsanız oluşan temp resimleri görebilirsiniz.Ve işte bu kadar ,projeyi çalıştırıp "gif is created" mesajını gördüğünüzde SamplePictures klasöründe tes.gif adında bir gif'in oluştuğunu görebilirsiniz.


Projenin tam halini burada bulabilirsiniz.

Sağlıkla kalın.


Share on Google Plus

About Sema KUDU

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

0 yorum :

Yorum Gönder

Türkiye yenilmez,Millet Eğilmez!