Search code examples
c#imagejpegaspose

Why am I getting alot of exceptions processing jpeg image byte streams


I am trying to use Aspose.Imaging version 21.7.0 to compress some .jpg and .png byte arrays.

My Winforms Click event:

    private void btnConvert_Click(object sender, EventArgs e)
    {
        _context.Images.Load();

        var images = _context.Images.Local.ToBindingList();
        
        foreach (var image in images)
        {
            if (image.ImageData != null)
            {
                image.MimeType = MimeTypes.GetMimeType(image.Filename.Trim());
                if (image.MimeType.StartsWith("image") && image.MimeType != "image/vnd.microsoft.icon")
                {

                    byte[] newImage;
                    using (MemoryStream stream = new MemoryStream(image.ImageData))
                    {
                        using (RasterImage myImage = (RasterImage) Image.Load(stream))
                        {
                            switch (image.MimeType)
                            {
                                case "image/png":
                                    PngOptions options = new PngOptions
                                    {
                                        CompressionLevel = 9,
                                        ColorType = PngColorType.IndexedColor,
                                        Progressive = true,
                                        Palette = ColorPaletteHelper.GetCloseImagePalette(myImage, 256,
                                            PaletteMiningMethod.Histogram)
                                    };

                                    using (MemoryStream memory = new MemoryStream())
                                    {
                                        myImage.Save(memory, options);
                                        memory.Position = 0;
                                        newImage = memory.ToArray();
                                    }

                                    break;
                                case "image/jpeg":
                                    JpegOptions saveOptions = new JpegOptions
                                    {
                                        BitsPerChannel = 8,
                                        CompressionType = JpegCompressionMode.Progressive,
                                        Quality = 100,
                                        ResolutionSettings = new ResolutionSetting(96.0, 96.0),
                                        ResolutionUnit = ResolutionUnit.Inch,
                                        ColorType = JpegCompressionColorMode.Cmyk,
                                        Palette = ColorPaletteHelper.GetCloseImagePalette(myImage, 256, PaletteMiningMethod.Histogram)
                                    };

                                    using (MemoryStream memory = new MemoryStream())
                                    {
                                        Debug.WriteLine(image.Filename);
                                        try
                                        {
                                            myImage.Save(memory, saveOptions); <<== Exceptions
                                        }
                                        catch (Exception exception)
                                        {
                                            Debug.WriteLine("Image Byte Array: " + image.ImageData);
                                        }
                                        
                                        memory.Position = 0;
                                        newImage = memory.ToArray();
                                    }

                                    break;
                                default:
                                    newImage = null;
                                    break;
                            }
                            
                        }
                    }

                    image.CompressedImageData = Compress(newImage);
                }
                else
                {
                    image.CompressedImageData = null;
                }
            }
        }

        var count = _context.SaveChanges();

        MessageBox.Show($@"{count} images compressed.");
    }

I am getting alot of Exceptions with jpeg images. Example:

Exception thrown: '   ' in Aspose.Imaging.dll

Exception thrown: 'Aspose.Imaging.FileFormats.Dng.DngException' in Aspose.Imaging.dll

Exception thrown: '   ' in Aspose.Imaging.dll

Exception thrown: 'Aspose.Imaging.CoreExceptions.ImageSaveException' in Aspose.Imaging.dll

... all thrown from myImage.Save(memory, saveOptions) in the jpeg section.

Any help will be appreciated.


Solution

  • Since Aspose.Imaging is a paid product, you should contact them at their site for support.

    There is a free forum specially for Aspose products: https://forum.aspose.com/

    Everyone that have experienced with Aspose errors know that the errors are hard to understand due to their obfuscation of the code, so the best solution is to contact them directly.