From c4bd0aebb59ec7855b58caf05edd2194bcee72ec Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 3 Oct 2015 01:04:16 +1000 Subject: [PATCH] Working Gif Encoder :tada: Former-commit-id: cbd69b2e1405f6ba4dd766177ce70f9f8bf08433 Former-commit-id: 18b60afa438ff00a9e4d03b10ee19876d0132563 Former-commit-id: 24c2a39bca3156adf35295a0a9bbeb5c01fd1cff --- src/ImageProcessor/Formats/Gif/GifEncoder.cs | 236 +++++++++--------- .../Formats/Gif/Quantizer/OctreeQuantizer.cs | 8 +- .../Formats/Gif/Quantizer/Quantizer.cs | 6 +- src/ImageProcessor/Image.cs | 8 +- src/ImageProcessor/ImageBase.cs | 4 +- .../Formats/EncoderDecoderTests.cs | 22 +- .../Formats/Gif/ani.gif.REMOVED.git-id | 1 + .../Formats/Gif/ani2.gif.REMOVED.git-id | 1 + .../TestImages/Formats/Gif/giphy.gif | Bin 0 -> 53655 bytes 9 files changed, 137 insertions(+), 149 deletions(-) create mode 100644 tests/ImageProcessor.Tests/TestImages/Formats/Gif/ani.gif.REMOVED.git-id create mode 100644 tests/ImageProcessor.Tests/TestImages/Formats/Gif/ani2.gif.REMOVED.git-id create mode 100644 tests/ImageProcessor.Tests/TestImages/Formats/Gif/giphy.gif diff --git a/src/ImageProcessor/Formats/Gif/GifEncoder.cs b/src/ImageProcessor/Formats/Gif/GifEncoder.cs index 549333ac4..46bb8dd31 100644 --- a/src/ImageProcessor/Formats/Gif/GifEncoder.cs +++ b/src/ImageProcessor/Formats/Gif/GifEncoder.cs @@ -7,22 +7,13 @@ namespace ImageProcessor.Formats { using System; using System.IO; + using System.Linq; /// /// The Gif encoder /// public class GifEncoder : IImageEncoder { - /// - /// The gif decoder if any used to decode the original image. - /// - private GifDecoder gifDecoder; - - /// - /// The currently processed image. - /// - private ImageBase currentImage; - /// /// Gets or sets the quality of output for images. /// @@ -62,13 +53,6 @@ namespace ImageProcessor.Formats Image image = (Image)imageBase; - // Try to grab and assign an image decoder. - IImageDecoder decoder = image.CurrentDecoder; - if (decoder.GetType() == typeof(GifDecoder)) - { - this.gifDecoder = (GifDecoder)decoder; - } - // Write the header. // File Header signature and version. this.WriteString(stream, GifConstants.FileType); @@ -84,63 +68,41 @@ namespace ImageProcessor.Formats // Write the LSD and check to see if we need a global color table. // Always true just now. bool globalColor = this.WriteGlobalLogicalScreenDescriptor(image, stream, bitdepth); - - QuantizedImage quantized; - - // Should always be true. - if (globalColor) - { - quantized = this.WriteColorTable(imageBase, stream, quality, bitdepth); - } - else - { - // Quantize the image returning a pallete. - IQuantizer quantizer = new OctreeQuantizer(quality.Clamp(1, 255), bitdepth + 1); - quantized = quantizer.Quantize(image); - } + QuantizedImage quantized = this.WriteColorTable(imageBase, stream, quality, bitdepth); this.WriteGraphicalControlExtension(imageBase, stream); + this.WriteImageDescriptor(quantized, quality, stream); - // TODO: Write Comments - this.WriteApplicationExtension(stream, image.RepeatCount, image.Frames.Count); - this.WriteImageDescriptor(quantized.ToImage(), quality, stream, true); - - // TODO: Write Image Info - - foreach (ImageFrame frame in image.Frames) + if (image.Frames.Any()) { - this.WriteGraphicalControlExtension(frame, stream); - this.WriteImageDescriptor(imageBase, quality, stream, false); + this.WriteApplicationExtension(stream, image.RepeatCount, image.Frames.Count); + foreach (ImageFrame frame in image.Frames) + { + this.WriteGraphicalControlExtension(frame, stream); + this.WriteFrameImageDescriptor(frame, stream); + } } - // Cleanup - this.gifDecoder = null; + // TODO: Write Comments extension etc + this.WriteByte(stream, GifConstants.EndIntroducer); } + /// + /// Writes the logical screen descriptor to the stream. + /// + /// The image to encode. + /// The stream to write to. + /// The bit depth. + /// The private bool WriteGlobalLogicalScreenDescriptor(Image image, Stream stream, int bitDepth) { - GifLogicalScreenDescriptor descriptor; - - // Try and grab an existing descriptor. - if (this.gifDecoder != null) + GifLogicalScreenDescriptor descriptor = new GifLogicalScreenDescriptor { - // Ensure the dimensions etc are up to date. - descriptor = this.gifDecoder.CoreDecoder.LogicalScreenDescriptor; - descriptor.Width = (short)image.Width; - descriptor.Height = (short)image.Height; - descriptor.GlobalColorTableFlag = true; - descriptor.GlobalColorTableSize = bitDepth; - } - else - { - descriptor = new GifLogicalScreenDescriptor - { - Width = (short)image.Width, - Height = (short)image.Height, - GlobalColorTableFlag = true, - GlobalColorTableSize = bitDepth - }; - } + Width = (short)image.Width, + Height = (short)image.Height, + GlobalColorTableFlag = true, + GlobalColorTableSize = bitDepth + }; this.WriteShort(stream, descriptor.Width); this.WriteShort(stream, descriptor.Height); @@ -157,6 +119,14 @@ namespace ImageProcessor.Formats return descriptor.GlobalColorTableFlag; } + /// + /// Writes the color table to the stream. + /// + /// The to encode. + /// The stream to write to. + /// The quality (number of colors) to encode the image to. + /// The bit depth. + /// The private QuantizedImage WriteColorTable(ImageBase image, Stream stream, int quality, int bitDepth) { // Quantize the image returning a pallete. @@ -166,7 +136,9 @@ namespace ImageProcessor.Formats // Grab the pallete and write it to the stream. Bgra[] pallete = quantizedImage.Palette; int pixelCount = pallete.Length; - int colorTableLength = pixelCount * 3; + + // Get max colors for bit depth. + int colorTableLength = (int)Math.Pow(2, bitDepth) * 3; byte[] colorTable = new byte[colorTableLength]; for (int i = 0; i < pixelCount; i++) @@ -183,40 +155,30 @@ namespace ImageProcessor.Formats return quantizedImage; } + /// + /// Writes the graphics control extension to the stream. + /// + /// The to encode. + /// The stream to write to. private void WriteGraphicalControlExtension(ImageBase image, Stream stream) { - GifGraphicsControlExtension extension; - // Calculate the quality. int quality = this.Quality > 0 ? this.Quality : image.Quality; quality = quality > 0 ? quality.Clamp(1, 256) : 256; - // Try and grab an existing descriptor. - // TODO: Check whether we need to. - if (this.gifDecoder != null) - { - // Ensure the dimensions etc are up to date. - extension = this.gifDecoder.CoreDecoder.GraphicsControlExtension; - extension.TransparencyFlag = quality > 1; - extension.TransparencyIndex = quality - 1; // Quantizer set last as transparent. - extension.DelayTime = image.FrameDelay; - } - else - { - // TODO: Check transparency logic. - bool hasTransparent = quality > 1; - DisposalMethod disposalMethod = hasTransparent - ? DisposalMethod.RestoreToBackground - : DisposalMethod.Unspecified; + // TODO: Check transparency logic. + bool hasTransparent = quality > 1; + DisposalMethod disposalMethod = hasTransparent + ? DisposalMethod.RestoreToBackground + : DisposalMethod.Unspecified; - extension = new GifGraphicsControlExtension() - { - DisposalMethod = disposalMethod, - TransparencyFlag = hasTransparent, - TransparencyIndex = quality - 1, - DelayTime = image.FrameDelay - }; - } + GifGraphicsControlExtension extension = new GifGraphicsControlExtension() + { + DisposalMethod = disposalMethod, + TransparencyFlag = hasTransparent, + TransparencyIndex = quality - 1, // Quantizer sets last index as transparent. + DelayTime = image.FrameDelay + }; this.WriteByte(stream, GifConstants.ExtensionIntroducer); this.WriteByte(stream, GifConstants.GraphicControlLabel); @@ -233,6 +195,12 @@ namespace ImageProcessor.Formats this.WriteByte(stream, GifConstants.Terminator); } + /// + /// Writes the application exstension to the stream. + /// + /// The stream to write to. + /// The animated image repeat count. + /// Th number of image frames. private void WriteApplicationExtension(Stream stream, ushort repeatCount, int frames) { // Application Extension Header @@ -254,7 +222,13 @@ namespace ImageProcessor.Formats } } - private void WriteImageDescriptor(ImageBase image, int quality, Stream stream, bool first) + /// + /// Writes the image descriptor to the stream. + /// + /// The containing indexed pixels. + /// The quality (number of colors) to encode the image to. + /// The stream to write to. + private void WriteImageDescriptor(QuantizedImage image, int quality, Stream stream) { this.WriteByte(stream, GifConstants.ImageDescriptorLabel); // 2c // TODO: Can we capture this? @@ -263,43 +237,59 @@ namespace ImageProcessor.Formats this.WriteShort(stream, image.Width); this.WriteShort(stream, image.Height); - if (first) - { - // Calculate the quality. - int bitdepth = this.GetBitsNeededForColorDepth(quality); + // Calculate the quality. + int bitdepth = this.GetBitsNeededForColorDepth(quality); - // No LCT use GCT. - this.WriteByte(stream, 0); + // No LCT use GCT. + this.WriteByte(stream, 0); - // Write the image data. Pixels have already been quantized. - this.WriteImageData(image, stream, bitdepth); - } - else - { - // Calculate the quality. - quality = this.Quality > 0 ? this.Quality : image.Quality; - quality = quality > 0 ? quality.Clamp(1, 256) : 256; - int bitdepth = this.GetBitsNeededForColorDepth(quality); - - int packed = 0x80 | // 1: Local color table flag = 1 (LCT used) - 0x00 | // 2: Interlace flag 0 - 0x00 | // 3: Sort flag 0 - 0 | // 4-5: Reserved - bitdepth - 1; - - this.WriteByte(stream, packed); - - // Now immediately follow with the color table. - QuantizedImage quantized = this.WriteColorTable(image, stream, quality, bitdepth); - this.WriteImageData(quantized.ToImage(), stream, bitdepth); - } + // Write the image data.. + this.WriteImageData(image, stream, bitdepth); + } - this.WriteByte(stream, GifConstants.EndIntroducer); + /// + /// Writes the image descriptor to the stream. + /// + /// The to be encoded. + /// The stream to write to. + private void WriteFrameImageDescriptor(ImageBase image, Stream stream) + { + this.WriteByte(stream, GifConstants.ImageDescriptorLabel); // 2c + // TODO: Can we capture this? + this.WriteShort(stream, 0); // Left position + this.WriteShort(stream, 0); // Top position + this.WriteShort(stream, image.Width); + this.WriteShort(stream, image.Height); + + // Calculate the quality. + int quality = this.Quality > 0 ? this.Quality : image.Quality; + quality = quality > 0 ? quality.Clamp(1, 256) : 256; + int bitdepth = this.GetBitsNeededForColorDepth(quality); + + int packed = 0x80 | // 1: Local color table flag = 1 (LCT used) + 0x00 | // 2: Interlace flag 0 + 0x00 | // 3: Sort flag 0 + 0 | // 4-5: Reserved + bitdepth - 1; + + this.WriteByte(stream, packed); + + // Now immediately follow with the color table. + QuantizedImage quantized = this.WriteColorTable(image, stream, quality, bitdepth); + this.WriteImageData(quantized, stream, bitdepth); } - private void WriteImageData(ImageBase image, Stream stream, int bitDepth) + /// + /// Writes the image pixel data to the stream. + /// + /// The containing indexed pixels. + /// The stream to write to. + /// The bit depth of the image. + private void WriteImageData(QuantizedImage image, Stream stream, int bitDepth) { - LzwEncoder encoder = new LzwEncoder(image.Pixels, (byte)bitDepth); + byte[] indexedPixels = image.Pixels; + + LzwEncoder encoder = new LzwEncoder(indexedPixels, (byte)bitDepth); encoder.Encode(stream); this.WriteByte(stream, GifConstants.Terminator); diff --git a/src/ImageProcessor/Formats/Gif/Quantizer/OctreeQuantizer.cs b/src/ImageProcessor/Formats/Gif/Quantizer/OctreeQuantizer.cs index a7ebe8ec3..1cf697589 100644 --- a/src/ImageProcessor/Formats/Gif/Quantizer/OctreeQuantizer.cs +++ b/src/ImageProcessor/Formats/Gif/Quantizer/OctreeQuantizer.cs @@ -338,7 +338,7 @@ namespace ImageProcessor.Formats private int paletteIndex; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// /// The level in the tree = 0 - 7 @@ -415,7 +415,7 @@ namespace ImageProcessor.Formats if (null == child) { - // Create a new child node & store in the array + // Create a new child node and store it in the array child = new OctreeNode(level + 1, colorBits, octree); this.children[index] = child; } @@ -511,8 +511,8 @@ namespace ImageProcessor.Formats { int shift = 7 - level; int pixelIndex = ((pixel.R & Mask[level]) >> (shift - 2)) | - ((pixel.G & Mask[level]) >> (shift - 1)) | - ((pixel.B & Mask[level]) >> shift); + ((pixel.G & Mask[level]) >> (shift - 1)) | + ((pixel.B & Mask[level]) >> shift); if (null != this.children[pixelIndex]) { diff --git a/src/ImageProcessor/Formats/Gif/Quantizer/Quantizer.cs b/src/ImageProcessor/Formats/Gif/Quantizer/Quantizer.cs index ec00bf508..9efe62ec3 100644 --- a/src/ImageProcessor/Formats/Gif/Quantizer/Quantizer.cs +++ b/src/ImageProcessor/Formats/Gif/Quantizer/Quantizer.cs @@ -61,9 +61,11 @@ namespace ImageProcessor.Formats byte[] quantizedPixels = new byte[width * height]; + List palette = this.GetPalette(); + this.SecondPass(imageBase, quantizedPixels, width, height); - return new QuantizedImage(width, height, this.GetPalette().ToArray(), quantizedPixels); + return new QuantizedImage(width, height, palette.ToArray(), quantizedPixels); } /// @@ -158,4 +160,4 @@ namespace ImageProcessor.Formats /// protected abstract List GetPalette(); } -} +} \ No newline at end of file diff --git a/src/ImageProcessor/Image.cs b/src/ImageProcessor/Image.cs index ded47cc3f..8a4adb1f2 100644 --- a/src/ImageProcessor/Image.cs +++ b/src/ImageProcessor/Image.cs @@ -232,11 +232,6 @@ namespace ImageProcessor /// A list of image properties. public IList Properties { get; } = new List(); - /// - /// The current decoder - /// - internal IImageDecoder CurrentDecoder { get; set; } - /// /// Loads the image from the given stream. /// @@ -276,8 +271,7 @@ namespace ImageProcessor IImageDecoder decoder = decoders.FirstOrDefault(x => x.IsSupportedFileFormat(header)); if (decoder != null) { - this.CurrentDecoder = decoder; - this.CurrentDecoder.Decode(this, stream); + decoder.Decode(this, stream); return; } } diff --git a/src/ImageProcessor/ImageBase.cs b/src/ImageProcessor/ImageBase.cs index 22362f0e5..c90516861 100644 --- a/src/ImageProcessor/ImageBase.cs +++ b/src/ImageProcessor/ImageBase.cs @@ -145,7 +145,7 @@ namespace ImageProcessor throw new ArgumentOutOfRangeException(nameof(x), "Value cannot be less than zero or greater than the bitmap width."); } - if ((y < 0) || (y >= this.Width)) + if ((y < 0) || (y >= this.Height)) { throw new ArgumentOutOfRangeException(nameof(y), "Value cannot be less than zero or greater than the bitmap height."); } @@ -163,7 +163,7 @@ namespace ImageProcessor throw new ArgumentOutOfRangeException(nameof(x), "Value cannot be less than zero or greater than the bitmap width."); } - if ((y < 0) || (y >= this.Width)) + if ((y < 0) || (y >= this.Height)) { throw new ArgumentOutOfRangeException(nameof(y), "Value cannot be less than zero or greater than the bitmap height."); } diff --git a/tests/ImageProcessor.Tests/Formats/EncoderDecoderTests.cs b/tests/ImageProcessor.Tests/Formats/EncoderDecoderTests.cs index 86732b1e9..dae8f8763 100644 --- a/tests/ImageProcessor.Tests/Formats/EncoderDecoderTests.cs +++ b/tests/ImageProcessor.Tests/Formats/EncoderDecoderTests.cs @@ -11,14 +11,14 @@ public class EncoderDecoderTests { [Theory] - //[InlineData("TestImages/Car.bmp")] - //[InlineData("TestImages/Portrait.png")] - //[InlineData("../../TestImages/Formats/Jpg/Backdrop.jpg")] + [InlineData("../../TestImages/Formats/Jpg/Backdrop.jpg")] [InlineData("../../TestImages/Formats/Gif/a.gif")] - //[InlineData("../../TestImages/Formats/Gif/leaf.gif")] - //[InlineData("TestImages/Windmill.gif")] - //[InlineData("../../TestImages/Formats/Bmp/Car.bmp")] - //[InlineData("../../TestImages/Formats/Png/cmyk.png")] + [InlineData("../../TestImages/Formats/Gif/leaf.gif")] + [InlineData("../../TestImages/Formats/Gif/ani.gif")] + [InlineData("../../TestImages/Formats/Gif/ani2.gif")] + [InlineData("../../TestImages/Formats/Gif/giphy.gif")] + [InlineData("../../TestImages/Formats/Bmp/Car.bmp")] + [InlineData("../../TestImages/Formats/Png/cmyk.png")] public void DecodeThenEncodeImageFromStreamShouldSucceed(string filename) { if (!Directory.Exists("Encoded")) @@ -29,7 +29,7 @@ FileStream stream = File.OpenRead(filename); Stopwatch watch = Stopwatch.StartNew(); Image image = new Image(stream); - + string encodedFilename = "Encoded/" + Path.GetFileName(filename); //if (!image.IsAnimated) @@ -62,8 +62,8 @@ [Theory] [InlineData("../../TestImages/Formats/Jpg/Backdrop.jpg")] - [InlineData("../../TestImages/Formats/Bmp/Car.bmp")] - [InlineData("../../TestImages/Formats/Png/cmyk.png")] + //[InlineData("../../TestImages/Formats/Bmp/Car.bmp")] + //[InlineData("../../TestImages/Formats/Png/cmyk.png")] public void QuantizedImageShouldPreserveMaximumColorPrecision(string filename) { if (!Directory.Exists("Quantized")) @@ -74,7 +74,7 @@ Image image = new Image(File.OpenRead(filename)); IQuantizer quantizer = new OctreeQuantizer(); QuantizedImage quantizedImage = quantizer.Quantize(image); - + var pixel = quantizedImage.Pixels; using (FileStream output = File.OpenWrite($"Quantized/{ Path.GetFileName(filename) }")) { IImageEncoder encoder = Image.Encoders.First(e => e.IsSupportedFileExtension(Path.GetExtension(filename))); diff --git a/tests/ImageProcessor.Tests/TestImages/Formats/Gif/ani.gif.REMOVED.git-id b/tests/ImageProcessor.Tests/TestImages/Formats/Gif/ani.gif.REMOVED.git-id new file mode 100644 index 000000000..9b07936a0 --- /dev/null +++ b/tests/ImageProcessor.Tests/TestImages/Formats/Gif/ani.gif.REMOVED.git-id @@ -0,0 +1 @@ +a0cc93222effb5feec0d1a1dc45efd0c5af77450 \ No newline at end of file diff --git a/tests/ImageProcessor.Tests/TestImages/Formats/Gif/ani2.gif.REMOVED.git-id b/tests/ImageProcessor.Tests/TestImages/Formats/Gif/ani2.gif.REMOVED.git-id new file mode 100644 index 000000000..c8fe9de52 --- /dev/null +++ b/tests/ImageProcessor.Tests/TestImages/Formats/Gif/ani2.gif.REMOVED.git-id @@ -0,0 +1 @@ +c2c7a5fcc0f00cdef39dacd7df0816137b3d63a3 \ No newline at end of file diff --git a/tests/ImageProcessor.Tests/TestImages/Formats/Gif/giphy.gif b/tests/ImageProcessor.Tests/TestImages/Formats/Gif/giphy.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f2618fba2d7356583a2114abbc6bc2b2ea0b361 GIT binary patch literal 53655 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