Post Page Advertisement [Top]

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.


1 yorum:

Bottom Ad [Post Page]