简体   繁体   English

ImageMagick Pdf到图像的转换太慢

[英]ImageMagick Pdf to image conversion is too slow

I'm using ImageMagick.NET for generating image from pdf. 我正在使用ImageMagick.NET从pdf生成图像。 Its working, but the conversion process is too slow. 它可以工作,但是转换过程太慢。 Code --> 代码->

 public void ProcessRequest(HttpContext context)
    {
        if (context.Request["id"] != null)
        {
            string id = context.Request["id"].ToString();


            MagickReadSettings settings = new MagickReadSettings();
            settings.Density = new MagickGeometry(300, 300);

            using (MagickImageCollection images = new MagickImageCollection())
            {
                images.Read(System.Web.HttpContext.Current.Server.MapPath(string.Format("~/Reciepts/order{0}.pdf", id)), settings);

                MagickImage vertical= images.AppendVertically();
                 using (var memoryStream = new MemoryStream())
                {
                    vertical.ToBitmap().Save(memoryStream, ImageFormat.Jpeg);
                    var d = memoryStream.GetBuffer();
                    context.Response.Clear();
                    context.Response.ContentType = "image/jpeg";
                    context.Response.BinaryWrite(d);
                    context.Response.End();
                }
            }

        }
    }

Where i can improve ? 我在哪里可以改善?

You are using Magick.NET not ImageMagick.NET. 您正在使用Magick.NET而不是ImageMagick.NET。

It is not necessary to create a bitmap before you send it to the output stream. 在将位图发送到输出流之前,无需创建位图。 You can just do this: 您可以这样做:

using (MagickImage vertical=images.AppendVertically())
{
  vertical.Format = MagickFormat.Jpeg;
  vertical.Write(context.Response.OutputStream);
}

And maybe you should cache the result to a file? 也许您应该将结果缓存到文件中?

If you decided to use Magick.NET, method is not wrong. 如果您决定使用Magick.NET,则方法没有错。 First answer gives you "Using" statement for MagickImage . 第一个答案为MagickImage提供“使用”语句。 But this differs only a few milliseconds to finish the job. 但这仅相差几毫秒即可完成工作。

I see that the slow line is this line: 我看到慢线是这条线:

images.Read(System.Web.HttpContext.Current.
    Server.MapPath(string.Format("~/Reciepts/order{0}.pdf", id)), settings);

because of settings objects properties. 由于设置对象的属性。 Your property says that image must be in 300dpi and 300 might be very high for your cpu: 您的媒体资源表示图片的分辨率必须为300dpi,并且对于您的cpu而言,图像可能会很高:

settings.Density = new MagickGeometry(300, 300);

You can try to use lower density, not 300dpi. 您可以尝试使用较低的密度,而不是300dpi。 Lower density is more fast: 较低的密度更快:

settings.Density = new Density(72, 72);

I think there must be another fast way to create image from pdf file. 我认为必须有另一种从pdf文件创建图像的快速方法。 Magick.NET uses Ghostscript to generate image from pdf and Ghostscript is slow and sometimes not successful to generate image from complicated (layered) pdf's. Magick.NET使用Ghostscript从pdf生成图像,而Ghostscript速度很慢,有时无法从复杂(分层)的pdf生成图像。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM