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 ); } }
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(); }
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); } }
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); } } }
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(); }
/* * 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); }
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); } }
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; }
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); }
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(); }
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); }