Browse Source

Merge branch 'release/3.1.x' into js/fix-2752

pull/2769/head
James Jackson-South 2 years ago
parent
commit
2f3d24df44
  1. 6
      src/ImageSharp/Formats/Webp/Lossless/Vp8LEncoder.cs
  2. 4
      src/ImageSharp/Formats/Webp/WebpChunkParsingUtils.cs
  3. 17
      tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs
  4. 1
      tests/ImageSharp.Tests/TestImages.cs
  5. 3
      tests/Images/Input/Webp/issues/Issue2763.png

6
src/ImageSharp/Formats/Webp/Lossless/Vp8LEncoder.cs

@ -699,6 +699,8 @@ internal class Vp8LEncoder : IDisposable
}
}
histogramImageSize = maxIndex;
this.bitWriter.PutBits((uint)(this.HistoBits - 2), 3);
this.EncodeImageNoHuffman(
histogramBgra,
@ -714,7 +716,7 @@ internal class Vp8LEncoder : IDisposable
// Store Huffman codes.
// Find maximum number of symbols for the huffman tree-set.
int maxTokens = 0;
for (int i = 0; i < 5 * histogramImage.Count; i++)
for (int i = 0; i < 5 * histogramImageSize; i++)
{
HuffmanTreeCode codes = huffmanCodes[i];
if (maxTokens < codes.NumSymbols)
@ -729,7 +731,7 @@ internal class Vp8LEncoder : IDisposable
tokens[i] = new HuffmanTreeToken();
}
for (int i = 0; i < 5 * histogramImage.Count; i++)
for (int i = 0; i < 5 * histogramImageSize; i++)
{
HuffmanTreeCode codes = huffmanCodes[i];
this.StoreHuffmanCode(huffTree, tokens, codes);

4
src/ImageSharp/Formats/Webp/WebpChunkParsingUtils.cs

@ -218,10 +218,6 @@ internal static class WebpChunkParsingUtils
// 3 reserved bytes should follow which are supposed to be zero.
stream.Read(buffer, 0, 3);
if (buffer[0] != 0 || buffer[1] != 0 || buffer[2] != 0)
{
WebpThrowHelper.ThrowImageFormatException("reserved bytes should be zero");
}
// 3 bytes for the width.
uint width = ReadUInt24LittleEndian(stream, buffer) + 1;

17
tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs

@ -497,6 +497,23 @@ public class WebpEncoderTests
image.VerifyEncoder(provider, "webp", string.Empty, encoder, ImageComparer.Tolerant(0.04f));
}
// https://github.com/SixLabors/ImageSharp/issues/2763
[Theory]
[WithFile(Lossy.Issue2763, PixelTypes.Rgba32)]
public void WebpDecoder_CanDecode_Issue2763<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel>
{
WebpEncoder encoder = new()
{
Quality = 84,
FileFormat = WebpFileFormatType.Lossless
};
using Image<TPixel> image = provider.GetImage(PngDecoder.Instance);
image.DebugSave(provider);
image.VerifyEncoder(provider, "webp", string.Empty, encoder);
}
public static void RunEncodeLossy_WithPeakImage()
{
TestImageProvider<Rgba32> provider = TestImageProvider<Rgba32>.File(TestImageLossyFullPath);

1
tests/ImageSharp.Tests/TestImages.cs

@ -823,6 +823,7 @@ public static class TestImages
public const string Issue2243 = "Webp/issues/Issue2243.webp";
public const string Issue2257 = "Webp/issues/Issue2257.webp";
public const string Issue2670 = "Webp/issues/Issue2670.webp";
public const string Issue2763 = "Webp/issues/Issue2763.png";
}
}

3
tests/Images/Input/Webp/issues/Issue2763.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:eb221c5045e9bcbfdb7f4704aa571d910ca0d382fe4748319fe56f4c8c2aab78
size 429101
Loading…
Cancel
Save