Using version 4.2.5
I have an app that allows the user to upload a PDF, which then gets rasterized to an image stream (using HiQPDF) and I then use ImageResizer to scale it down.
In cases where the PDF has a very large print size, the resulting image that is rasterized is very large (30,000 px x 75,000 px) and as a result the Image.Build() is failing with the below error.
HiQPDF doesn't have any sort of size scaling options during rasterization, so I'm a bit stuck. Any ideas on if there is a way to get around this error?
Overflow error.
Stacktrace:
at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
at System.Drawing.Graphics.DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, Int32 callbackData)
at System.Drawing.Graphics.DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr)
at ImageResizer.ImageBuilder.InternalGraphicsDrawImage(ImageState state, Bitmap dest, Bitmap source, PointF[] targetArea, RectangleF sourceArea, Single[][] colorMatrix)
at ImageResizer.ImageBuilder.RenderImage(ImageState s)
at ImageResizer.ImageBuilder.Render(ImageState s)
at ImageResizer.ImageBuilder.Process(ImageState s)
at ImageResizer.ImageBuilder.BuildJobBitmapToBitmap(ImageJob job, Bitmap source, Boolean transparencySupported)
at ImageResizer.ImageBuilder.BuildJobBitmapToStream(ImageJob job, Bitmap source, Stream dest)
at ImageResizer.ImageBuilder.BuildJob(ImageJob job)
at ImageResizer.ImageBuilder.BuildInternal(ImageJob job)
at ImageResizer.ImageBuilder.BuildInQueue(ImageJob job, Boolean useSemaphore, Int32 maxQueuingMilliseconds, CancellationToken cancel)
at ImageResizer.ImageBuilder.Build(ImageJob job)
Relevant Code:
string strInstructions = $"maxwidth={maxWidthPixels};maxheight={maxHeightPixels};format=jpg;mode=max;";
strInstructions += "quality=" + ImageSaveQuality + ";";
using (var updatedImageFileStream = new MemoryStream())
{
ImageJob imageJob = new ImageJob(origFileStream, updatedImageFileStream,
new Instructions(strInstructions)
);
imageJob.Build();
You may have hit the upper limit for a System.Drawing based system.
I would suggest using the ImageResizer replacement Imageflow.NET instead. It should also produce files with better compression.