Exemple #1
12
        public static byte[] GetThumbnailGIF89a(Stream stream, Size min, Size thumb)
        {
            long offset = stream.Position;
            GifDecoder decoder = new GifDecoder();
            decoder.Read(stream);
            Size sz = decoder.GetFrameSize();
            stream.Seek(offset, SeekOrigin.Begin);

            if (min != null && sz.Width < min.Width && sz.Height < min.Height)
            {
                throw new InvalidImageSizeException(
                    string.Empty, sz, min);
            }

            return GetResizedImageBytesGIF89a(decoder, stream, thumb, s_ImageQuality);
        }
		static void Main(string[] args)
		{
			/* create Gif */
			//you should replace filepath
			String [] imageFilePaths = new String[]{"c:\\01.png","c:\\02.png","c:\\03.png"}; 
			String outputFilePath = "c:\\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();
			/* extract Gif */
			string outputPath = "c:\\";
			GifDecoder gifDecoder = new GifDecoder();
			gifDecoder.Read( "c:\\test.gif" );
			for ( int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++ ) 
			{
				Image frame = gifDecoder.GetFrame( i );  // frame i
				frame.Save( outputPath + Guid.NewGuid().ToString() + ".png", ImageFormat.Png );
			}
		}
Exemple #3
0
        public void TestLoadGIF89a()
        {
            GifDecoder a_decoder = new GifDecoder();
            Stream sm = Assembly.GetExecutingAssembly().GetManifestResourceStream("SnCore.Tools.Tests.Images.animated.gif");
            Console.WriteLine("Bytes: {0}", sm.Length);
            a_decoder.Read(sm);
            Console.WriteLine("Frames: {0}", a_decoder.GetFrameCount());

            sm.Seek(0, SeekOrigin.Begin);
            Assert.IsNotNull(sm);
            ThumbnailBitmap b = new ThumbnailBitmap(sm);
            Console.WriteLine("Size: {0}x{1}", b.FullSize.Width, b.FullSize.Height);
            Assert.AreEqual(new Size(320, 240), b.FullSize);
            Assert.IsNotNull(b.Thumbnail);
            Assert.IsNotNull(b.Bitmap);
            ThumbnailBitmap th = new ThumbnailBitmap(b.Thumbnail);
            Console.WriteLine("Size: {0}x{1}", th.FullSize.Width, th.FullSize.Height);
            Assert.AreEqual(new Size(150, 100), th.FullSize);
            
            // make sure that the bitmap is still animated            
            Console.WriteLine("Bytes: {0}", b.Bitmap.Length);
            GifDecoder decoder = new GifDecoder();
            decoder.Read(new MemoryStream(b.Bitmap));
            Console.WriteLine("Frames: {0}", decoder.GetFrameCount());

            GifDecoder th_decoder = new GifDecoder();
            Console.WriteLine("Bytes: {0}", b.Thumbnail.Length);
            th_decoder.Read(new MemoryStream(b.Thumbnail));
            Console.WriteLine("Frames: {0}", th_decoder.GetFrameCount());
            Assert.AreEqual(th_decoder.GetFrameCount(), decoder.GetFrameCount());
        }
        public static void Resize(GifDecoder decoder, Stream outStream, int width, int height, int quality)
        {
            AnimatedGifEncoder encoder = new AnimatedGifEncoder();
            Size sourcesize            = decoder.GetFrameSize();

            encoder.SetSize(sourcesize.Width < sourcesize.Height ? new Size(width, height) : new Size(height, width));
            encoder.SetRepeat(decoder.GetLoopCount());
            // encoder.SetQuality(quality);
            encoder.Start(outStream);
            for (int i = 0; i < decoder.GetFrameCount(); i++)
            {
                GifDecoder.GifFrame frame = decoder.GetFrame(i);
                encoder.SetDelay(frame.delay);
                encoder.SetTransparent(Color.FromArgb(frame.bgcolor));
                encoder.AddFrame(decoder.GetFrameImage(i));
            }
            encoder.Finish();
            outStream.Flush();
        }
Exemple #5
0
        public void ConsumeAnimatedGIFTest()
        {
            MemoryStream ms = new MemoryStream();
            AnimatedGifEncoder encoder = new AnimatedGifEncoder();
            // encoder.SetDelay(200);
            encoder.SetFrameRate(5);
            encoder.Start(ms);
            for (char i = 'a'; i <= 'z'; i++)
            {
                Console.Write(i.ToString());
                encoder.AddFrame(ThumbnailBitmap.GetBitmapFromText(i.ToString(), 48, 100, 200));
            }
            Console.WriteLine();
            encoder.Finish();
            ms.Flush();
            ms.Seek(0, SeekOrigin.Begin);

            GifDecoder decoder = new GifDecoder();
            decoder.Read(ms);
            Console.WriteLine("Frames: {0}", decoder.GetFrameCount());
            Assert.AreEqual(26, decoder.GetFrameCount());
        }
 private void button1_Click(object sender, EventArgs e)
 {
     String[] imageFilePaths = new String[] { "C:\\2.png", "C:\\3.png" };
     String outputFilePath = "C:\\ani.gif";
     AnimatedGifEncoder ec = new AnimatedGifEncoder();
     ec.Start(outputFilePath);
     ec.SetDelay(500);
     //-1:no repeat,0:always repeat
     ec.SetRepeat(0);
     for (int i = 0, count = imageFilePaths.Length; i < count; i++)
     {
         ec.AddFrame(Image.FromFile(imageFilePaths[i]));
     }
     ec.Finish();
     /* extract Gif */
     string outputPath = "c:\\";
     GifDecoder gifDecoder = new GifDecoder();
     gifDecoder.Read("c:\\test.gif");
     for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
     {
         Image frame = gifDecoder.GetFrame(i);  // frame i
         frame.Save(outputPath + Guid.NewGuid().ToString() + ".png", System.Drawing.Imaging.ImageFormat.Png);
     }
 }
Exemple #7
0
        public static void GenerateAvatar(int userID, string stringInDatabase)
        {
            string extension = Path.GetExtension(stringInDatabase);

            string fileName = SetupManager.GetAvatarFilename(userID, stringInDatabase);// userID + extension;
            string srcPath = SetupManager.GetSrcAvatarPath(userID, stringInDatabase);

            string tempFileName = fileName.Replace("\\", "/").Replace(userID + "/", "");

            string bigAvatarPath = IOUtil.JoinPath(bigAvatarOutputPath, tempFileName);
            string smallAvatarPath = IOUtil.JoinPath(smallAvatarOutputPath, tempFileName);
            string normalAvatarPath = IOUtil.JoinPath(normalAvatarOutputPath, tempFileName);

            string bigDir = bigAvatarPath.Replace("/", "\\");
            bigDir = bigDir.Substring(0, bigDir.LastIndexOf("\\"));

            string smallDir = smallAvatarPath.Replace("/", "\\");
            smallDir = smallDir.Substring(0, smallDir.LastIndexOf("\\"));

            string normalDir = normalAvatarPath.Replace("/", "\\");
            normalDir = normalDir.Substring(0, normalDir.LastIndexOf("\\"));

            if (Directory.Exists(bigDir) == false)
                Directory.CreateDirectory(bigDir);

            if (Directory.Exists(smallDir) == false)
                Directory.CreateDirectory(smallDir);

            if (Directory.Exists(normalDir) == false)
                Directory.CreateDirectory(normalDir);


            if (string.Compare(".gif", extension, true) == 0)
            {
                GifDecoder gifDecoder = new GifDecoder();

                if (gifDecoder.Read(srcPath) == GifDecoder.STATUS_OK)
                {
                    GenerateThumbGif(gifDecoder, smallAvatarPath, smallAvatarSize);
                    GenerateThumbGif(gifDecoder, normalAvatarPath, normalAvatarSize);
                    GenerateThumbGif(gifDecoder, bigAvatarPath, bigAvatarSize);
                }
                else
                {
                    using (Image image = Image.FromFile(srcPath))
                    {
                        GenerateThumb(image, smallAvatarPath, smallAvatarSize);
                        GenerateThumb(image, normalAvatarPath, normalAvatarSize);
                        GenerateThumb(image, bigAvatarPath, bigAvatarSize);
                    }
                }
            }
            else
            {
                using (Image image = Image.FromFile(srcPath))
                {
                    GenerateThumb(image, smallAvatarPath, smallAvatarSize);
                    GenerateThumb(image, normalAvatarPath, normalAvatarSize);
                    GenerateThumb(image, bigAvatarPath, bigAvatarSize);
                }
            }
        }
Exemple #8
0
        private static void GenerateThumbGif(GifDecoder decoder, string thumbPath, Size thumbSize)
        {
            GifEncoder encoder = new GifEncoder();

            encoder.Start(thumbPath);

            encoder.SetSize(thumbSize.Width, thumbSize.Height);

            encoder.SetRepeat(decoder.GetLoopCount());

            Bitmap bitmap = new Bitmap(thumbSize.Width, thumbSize.Height);

            for (int i = 0; i < decoder.GetFrameCount(); i++)
            {
                encoder.SetDelay(decoder.GetDelay(i));

                int dispose = decoder.GetDispose(i);

                Color tranColor = decoder.GetTransparent(i);

                if (tranColor.IsEmpty == false)
                    encoder.SetTransparent(decoder.GetTransparent(i));

                if (dispose != 1)
                {
                    bitmap.Dispose();
                    bitmap = new Bitmap(thumbSize.Width, thumbSize.Height);
                }

                using (Graphics g = Graphics.FromImage(bitmap))
                {
                    if (dispose == 2)
                    {
                        g.FillRectangle(new SolidBrush(tranColor), 0, 0, thumbSize.Width, thumbSize.Height);
                    }
                    //else if(dispose == 5)
                    //{
                    //    g.FillRectangle(new SolidBrush(Color.Black), 0, 0, thumbSize.Width, thumbSize.Height);
                    //}

                    g.DrawImage(decoder.GetFrame(i), 0, 0, thumbSize.Width, thumbSize.Height);
                }

                encoder.AddFrame(bitmap);
            }

            bitmap.Dispose();

            //using (Bitmap bitmap = new Bitmap(thumbSize.Width, thumbSize.Height))
            //{
            //    for (int i = 0; i < decoder.GetFrameCount(); i++)
            //    {
            //        encoder.SetDelay(decoder.GetDelay(i));

            //        Color tran = decoder.GetTransparent(i);

            //        using (Graphics g = Graphics.FromImage(bitmap))
            //        {
            //            if (tran != Color.Empty)
            //            {
            //                g.FillRectangle(new SolidBrush(tran), 0, 0, thumbSize.Width, thumbSize.Height);
            //            }
            //            else
            //            {

            //            }

            //            g.DrawImage(decoder.GetFrame(i), 0, 0, thumbSize.Width, thumbSize.Height);
            //        }

            //        encoder.AddFrame(bitmap);
            //    }
            //}

            encoder.Finish();
        }
Exemple #9
0
 public static void Resize(GifDecoder decoder, Stream outStream, int width, int height, int quality)
 {
     AnimatedGifEncoder encoder = new AnimatedGifEncoder();
     Size sourcesize = decoder.GetFrameSize();
     encoder.SetSize(sourcesize.Width < sourcesize.Height ? new Size(width, height) : new Size(height, width));
     encoder.SetRepeat(decoder.GetLoopCount());
     // encoder.SetQuality(quality);
     encoder.Start(outStream);
     for (int i = 0; i < decoder.GetFrameCount(); i++)
     {
         GifDecoder.GifFrame frame = decoder.GetFrame(i);
         encoder.SetDelay(frame.delay);
         encoder.SetTransparent(Color.FromArgb(frame.bgcolor));
         encoder.AddFrame(decoder.GetFrameImage(i));
     }
     encoder.Finish();
     outStream.Flush();
 }
Exemple #10
0
 /*
  * Resize an animated GIF
  */
 public static void Resize(Stream inStream, Stream outStream, int width, int height, int quality)
 {
     GifDecoder decoder = new GifDecoder();
     decoder.Read(inStream);
     Resize(decoder, outStream, width, height, quality);
 }
        internal void DoInverseButterTransform_gif(string filepathToOpen, string filepathToSave, bool decrypt, string password = "")
        {
            GifDecoder gifDecoder = new GifDecoder();
            gifDecoder.Read(filepathToOpen);
            List<Bitmap> frames = new List<Bitmap>();
            for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
            {
                frames.Add(new Bitmap(gifDecoder.GetFrame(i)));  // frame i

            }
            throw new NotImplementedException("Not yet implemented");

            byte[] payload = getPayloadFromImage(frames[1], decrypt, password);

            //saveBytesToFile(payload, filepathToSave);
        }
Exemple #12
0
 public static byte[] GetResizedImageBytesGIF89a(GifDecoder originalimage, Stream stream, Size ts, int quality)
 {
     Size sz = originalimage.GetFrameSize();
     if (sz.Height > ts.Height || sz.Width > ts.Width)
     {
         MemoryStream ms = new MemoryStream();
         AnimatedGifEncoder.Resize(originalimage, ms, ts.Width, ts.Height, quality);
         ms.Flush();
         byte[] result = new byte[ms.Length];
         MemoryStream resultstream = new MemoryStream(result);
         ms.WriteTo(resultstream);
         return result;
     }
     else
     {
         stream.Seek(0, SeekOrigin.Begin);
         BinaryReader sr = new BinaryReader(stream);
         return sr.ReadBytes((int)stream.Length);
     }
 }
Exemple #13
0
        public static bool TryGetResizedImageBytesGIF89a(Stream stream, Size ts, int quality, out Size sz, out byte[] bytes)
        {
            bytes = null;
            sz = default(Size);

            GifDecoder originalimage = new GifDecoder();
            if (!originalimage.TryRead(stream))
                return false;

            sz = originalimage.GetFrameSize();
            bytes = GetResizedImageBytesGIF89a(originalimage, stream, ts, quality);
            return true;
        }
Exemple #14
0
 public static byte[] GetResizedImageBytesGIF89a(Stream stream, Size ts, int quality, out Size sz)
 {
     GifDecoder originalimage = new GifDecoder();
     originalimage.Read(stream);
     sz = originalimage.GetFrameSize();
     return GetResizedImageBytesGIF89a(originalimage, stream, ts, quality);
 }
Exemple #15
0
 public void TestResizeTransparentGIF89()
 {
     Stream sm = Assembly.GetExecutingAssembly().GetManifestResourceStream("SnCore.Tools.Tests.Images.transparent.gif");
     // load original image in decoder
     GifDecoder originaldecoder = new GifDecoder();
     originaldecoder.Read(sm);
     sm.Seek(0, SeekOrigin.Begin);
     GifDecoder.GifFrame frame = originaldecoder.GetFrame(0);
     Console.WriteLine("Transparency: {0} - {1}", frame.transparency, Color.FromArgb(frame.bgcolor));
     // load in ThumnailBitmap
     Assert.IsNotNull(sm);
     ThumbnailBitmap b = new ThumbnailBitmap(sm);
     Console.WriteLine("Size: {0}x{1}", b.FullSize.Width, b.FullSize.Height);
     // Assert.AreEqual(b.FullSize, new Size(227, 227));
     Assert.IsNotNull(b.Thumbnail);
     Assert.IsNotNull(b.Bitmap);
     // reload in decoder, verify transparency
     GifDecoder decoder = new GifDecoder();
     decoder.Read(new MemoryStream(b.Bitmap));
     frame = decoder.GetFrame(0);
     Console.WriteLine("Transparency: {0} - {1}", frame.transparency, Color.FromArgb(frame.bgcolor));
     //FileStream f = File.Create("C:\\temp\\chefout.gif");
     //f.Write(b.Bitmap, 0, b.Bitmap.Length);
     //f.Close();
     //f = File.Create("C:\\temp\\chefthumbnail.gif");
     //f.Write(b.Thumbnail, 0, b.Thumbnail.Length);
     //f.Close();
 }
Exemple #16
0
 public void TestTooSmallGIF89()
 {
     Stream sm = Assembly.GetExecutingAssembly().GetManifestResourceStream("SnCore.Tools.Tests.Images.small.gif");
     // load original image in decoder
     GifDecoder originaldecoder = new GifDecoder();
     originaldecoder.Read(sm);
     sm.Seek(0, SeekOrigin.Begin);
     GifDecoder.GifFrame frame = originaldecoder.GetFrame(0);
     Console.WriteLine("Transparency: {0} - {1}", frame.transparency, Color.FromArgb(frame.bgcolor));
     // load in ThumnailBitmap
     Assert.IsNotNull(sm);
     ThumbnailBitmap b = new ThumbnailBitmap(sm);
     Console.WriteLine("Size: {0}x{1}", b.FullSize.Width, b.FullSize.Height);
 }