【问题标题】:ImageResizer Overflow error on large images begin scaled down大图像上的 ImageResizer 溢出错误开始缩小
【发布时间】:2021-01-14 20:13:03
【问题描述】:

使用版本 4.2.5

我有一个应用程序允许用户上传 PDF,然后将其光栅化为图像流(使用 HiQPDF),然后我使用 ImageResizer 将其缩小。

在 PDF 的打印尺寸非常大的情况下,光栅化的结果图像非常大(30,000 像素 x 75,000 像素),因此 Image.Build() 失败并出现以下错误。

HiQPDF 在光栅化过程中没有任何大小缩放选项,所以我有点卡住了。关于是否有办法解决此错误的任何想法?

Overflow error.

堆栈跟踪:

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)

相关代码:

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();

【问题讨论】:

    标签: c# imageresizer hiqpdf


    【解决方案1】:

    您可能已经达到了基于 System.Drawing 的系统的上限。

    我建议改用 ImageResizer 替换 Imageflow.NET。它还应该生成压缩更好的文件。

    string strInstructions = $"maxwidth={maxWidthPixels};maxheight={maxHeightPixels};format=jpg;mode=max;";
    strInstructions += "quality=" + ImageSaveQuality + ";";
        
    using var buildJob = new ImageJob();
    var jobResult = await buildJob.BuildCommandString(
                new StreamSource(originalStream, true),
                new StreamDestination(destStream, true), strInstructions)
            .SetSecurityOptions(new SecurityOptions()
                .SetMaxDecodeSize(new FrameSizeLimit(80000, 80000, 80000))
                .SetMaxEncodeSize(new FrameSizeLimit(80000, 80000, 80000))
                .SetMaxFrameSize(new FrameSizeLimit(80000, 80000, 80000)))
            .Finish()
            .InProcessAsync();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 2018-06-14
      • 2017-06-10
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多