Imagesharp: Some images failing to load due to different exceptions

Created on 24 Sep 2019  路  3Comments  路  Source: SixLabors/ImageSharp

Prerequisites

  • [X] I have written a descriptive issue title
  • [X] I have verified that I am running the latest version of ImageSharp
  • [ ] I have verified if the problem exist in both DEBUG and RELEASE mode
  • [ ] I have searched open and closed issues to ensure it has not already been reported

Description

Image 01.png

01

01.png
Exception happened when optimizing or comparing the image:
SixLabors.ImageSharp.ImageFormatException: Unknown filter type.
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.DecodePixelData[TPixel](Stream compressedStream, ImageFrame`1 image, PngMetadata pngMetadata)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.ReadScanlines[TPixel](PngChunk chunk, ImageFrame`1 image, PngMetadata pngMetadata)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.Decode[TPixel](Stream stream)
   at SixLabors.ImageSharp.Image.Decode[TPixel](Stream stream, Configuration config)
   at SixLabors.ImageSharp.Image.WithSeekableStream[T](Configuration config, Stream stream, Func`2 action)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, Stream stream, IImageFormat& format)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, String path)
   at DeveImageOptimizer.Helpers.ImageComparer.LoadImageHelper(String imagePath, List`1 tempFiles, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 34
   at DeveImageOptimizer.Helpers.ImageComparer.AreImagesEqual(String image1Path, String image2Path, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 56
   at DeveImageOptimizer.Helpers.ImageComparer.<>c__DisplayClass0_0.<AreImagesEqualAsync>b__0() in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 20
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
--- End of stack trace from previous location where exception was thrown ---
   at DeveImageOptimizer.FileProcessing.FileOptimizerProcessor.OptimizeFile(String fileToOptimize, String originDirectory) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\FileProcessing\FileOptimizerProcessor.cs:line 100

Image 03.png

03

03.png
Exception happened when optimizing or comparing the image:
System.IO.InvalidDataException: The archive entry was compressed using an unsupported compression method.
   at System.IO.Compression.Inflater.Inflate(FlushCode flushCode)
   at System.IO.Compression.Inflater.ReadInflateOutput(Byte* bufPtr, Int32 length, FlushCode flushCode, Int32& bytesRead)
   at System.IO.Compression.Inflater.InflateVerified(Byte* bufPtr, Int32 length)
   at System.IO.Compression.DeflateStream.ReadCore(Span`1 buffer)
   at System.IO.Compression.DeflateStream.Read(Byte[] array, Int32 offset, Int32 count)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.DecodePixelData[TPixel](Stream compressedStream, ImageFrame`1 image, PngMetadata pngMetadata)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.ReadScanlines[TPixel](PngChunk chunk, ImageFrame`1 image, PngMetadata pngMetadata)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.Decode[TPixel](Stream stream)
   at SixLabors.ImageSharp.Image.Decode[TPixel](Stream stream, Configuration config)
   at SixLabors.ImageSharp.Image.WithSeekableStream[T](Configuration config, Stream stream, Func`2 action)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, Stream stream, IImageFormat& format)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, String path)
   at DeveImageOptimizer.Helpers.ImageComparer.LoadImageHelper(String imagePath, List`1 tempFiles, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 34
   at DeveImageOptimizer.Helpers.ImageComparer.AreImagesEqual(String image1Path, String image2Path, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 56
   at DeveImageOptimizer.Helpers.ImageComparer.<>c__DisplayClass0_0.<AreImagesEqualAsync>b__0() in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 20
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
--- End of stack trace from previous location where exception was thrown ---
   at DeveImageOptimizer.FileProcessing.FileOptimizerProcessor.OptimizeFile(String fileToOptimize, String originDirectory) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\FileProcessing\FileOptimizerProcessor.cs:line 100

Image 03_1.png

03_1

03_1.png
Exception happened when optimizing or comparing the image:
SixLabors.ImageSharp.ImageFormatException: Invalid window size for ZLIB header: cinfo=12
   at SixLabors.ImageSharp.Formats.Png.Zlib.ZlibInflateStream.InitializeInflateStream(Boolean isCriticalChunk)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.ReadScanlines[TPixel](PngChunk chunk, ImageFrame`1 image, PngMetadata pngMetadata)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.Decode[TPixel](Stream stream)
   at SixLabors.ImageSharp.Image.Decode[TPixel](Stream stream, Configuration config)
   at SixLabors.ImageSharp.Image.WithSeekableStream[T](Configuration config, Stream stream, Func`2 action)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, Stream stream, IImageFormat& format)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, String path)
   at DeveImageOptimizer.Helpers.ImageComparer.LoadImageHelper(String imagePath, List`1 tempFiles, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 34
   at DeveImageOptimizer.Helpers.ImageComparer.AreImagesEqual(String image1Path, String image2Path, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 56
   at DeveImageOptimizer.Helpers.ImageComparer.<>c__DisplayClass0_0.<AreImagesEqualAsync>b__0() in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 20
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
--- End of stack trace from previous location where exception was thrown ---
   at DeveImageOptimizer.FileProcessing.FileOptimizerProcessor.OptimizeFile(String fileToOptimize, String originDirectory) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\FileProcessing\FileOptimizerProcessor.cs:line 100

Image 05.png

05

05.png
Exception happened when optimizing or comparing the image:
SixLabors.ImageSharp.ImageFormatException: Bad method for ZLIB header: cmf=254
   at SixLabors.ImageSharp.Formats.Png.Zlib.ZlibInflateStream.InitializeInflateStream(Boolean isCriticalChunk)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.ReadScanlines[TPixel](PngChunk chunk, ImageFrame`1 image, PngMetadata pngMetadata)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.Decode[TPixel](Stream stream)
   at SixLabors.ImageSharp.Image.Decode[TPixel](Stream stream, Configuration config)
   at SixLabors.ImageSharp.Image.WithSeekableStream[T](Configuration config, Stream stream, Func`2 action)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, Stream stream, IImageFormat& format)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, String path)
   at DeveImageOptimizer.Helpers.ImageComparer.LoadImageHelper(String imagePath, List`1 tempFiles, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 34
   at DeveImageOptimizer.Helpers.ImageComparer.AreImagesEqual(String image1Path, String image2Path, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 56
   at DeveImageOptimizer.Helpers.ImageComparer.<>c__DisplayClass0_0.<AreImagesEqualAsync>b__0() in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 20
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
--- End of stack trace from previous location where exception was thrown ---
   at DeveImageOptimizer.FileProcessing.FileOptimizerProcessor.OptimizeFile(String fileToOptimize, String originDirectory) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\FileProcessing\FileOptimizerProcessor.cs:line 100

Image 05_3.png

05_3

05_3.png
Exception happened when optimizing or comparing the image:
SixLabors.ImageSharp.ImageFormatException: Bad method for ZLIB header: cmf=1
   at SixLabors.ImageSharp.Formats.Png.Zlib.ZlibInflateStream.InitializeInflateStream(Boolean isCriticalChunk)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.ReadScanlines[TPixel](PngChunk chunk, ImageFrame`1 image, PngMetadata pngMetadata)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.Decode[TPixel](Stream stream)
   at SixLabors.ImageSharp.Image.Decode[TPixel](Stream stream, Configuration config)
   at SixLabors.ImageSharp.Image.WithSeekableStream[T](Configuration config, Stream stream, Func`2 action)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, Stream stream, IImageFormat& format)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, String path)
   at DeveImageOptimizer.Helpers.ImageComparer.LoadImageHelper(String imagePath, List`1 tempFiles, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 34
   at DeveImageOptimizer.Helpers.ImageComparer.AreImagesEqual(String image1Path, String image2Path, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 56
   at DeveImageOptimizer.Helpers.ImageComparer.<>c__DisplayClass0_0.<AreImagesEqualAsync>b__0() in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 20
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
--- End of stack trace from previous location where exception was thrown ---
   at DeveImageOptimizer.FileProcessing.FileOptimizerProcessor.OptimizeFile(String fileToOptimize, String originDirectory) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\FileProcessing\FileOptimizerProcessor.cs:line 100

Image 08_1.png

08_1

08_1.png
Exception happened when optimizing or comparing the image:
SixLabors.ImageSharp.ImageFormatException: Invalid window size for ZLIB header: cinfo=15
   at SixLabors.ImageSharp.Formats.Png.Zlib.ZlibInflateStream.InitializeInflateStream(Boolean isCriticalChunk)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.ReadScanlines[TPixel](PngChunk chunk, ImageFrame`1 image, PngMetadata pngMetadata)
   at SixLabors.ImageSharp.Formats.Png.PngDecoderCore.Decode[TPixel](Stream stream)
   at SixLabors.ImageSharp.Image.Decode[TPixel](Stream stream, Configuration config)
   at SixLabors.ImageSharp.Image.WithSeekableStream[T](Configuration config, Stream stream, Func`2 action)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, Stream stream, IImageFormat& format)
   at SixLabors.ImageSharp.Image.Load[TPixel](Configuration config, String path)
   at DeveImageOptimizer.Helpers.ImageComparer.LoadImageHelper(String imagePath, List`1 tempFiles, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 34
   at DeveImageOptimizer.Helpers.ImageComparer.AreImagesEqual(String image1Path, String image2Path, Boolean useImageSharpBugWorkaround) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 56
   at DeveImageOptimizer.Helpers.ImageComparer.<>c__DisplayClass0_0.<AreImagesEqualAsync>b__0() in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\Helpers\ImageComparer.cs:line 20
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
--- End of stack trace from previous location where exception was thrown ---
   at DeveImageOptimizer.FileProcessing.FileOptimizerProcessor.OptimizeFile(String fileToOptimize, String originDirectory) in C:\XKanWeg\##TempImageOptimizerFailingImagesInvest\DeveImageOptimizer\DeveImageOptimizer\FileProcessing\FileOptimizerProcessor.cs:line 100

Steps to Reproduce


Call Image.Load<Rgba32>(imagePath); on the images above.

System Configuration

  • ImageSharp version: 1.0.0-dev002988
  • Other ImageSharp packages and versions: N/A
  • Environment (Operating system, version and so on): Windows 10 Enterprise
  • .NET Framework version: 4.8
  • Additional information:
bug png help needed

Most helpful comment

Fixed by the amazing @brianpopow !

All 3 comments

It looks like we've hit a hard limitation of the .NET DeflateStream implementation. Turning off all sanitation code to ensure that the image matches the specification allows only partial decoding of some of the images. Not really sure how we can ever work around the issue without re-implementing using a zlib port.

05
05_3
08_1

Fixed by the amazing @brianpopow !

Was this page helpful?
0 / 5 - 0 ratings

Related issues

marcpabst picture marcpabst  路  3Comments

vpenades picture vpenades  路  4Comments

JimBobSquarePants picture JimBobSquarePants  路  3Comments

Hawxy picture Hawxy  路  3Comments

xakep139 picture xakep139  路  3Comments