ImageMagick.NET-更快的性能



我使用C#的ImageMagick.NET库,我想从.PDF文档中的每一页中获得一些信息。这是我当前的代码:

var list = new MagickImageCollection();
list.Read(file.FullName);
foreach (var page in list)
{
    if (!backgroundWorker.CancellationPending)
    {
        pageCount.pageColorspace(page);
        isFormat(page.Width, page.Height);
        pageCount.incPdfPages();
    }
}

但在我看来,表演真的很慢。10个703页的PDF文件需要4分钟。有办法让它更快吗?

您可以通过逐页读取文件来提高性能。如果你阅读整个文件,内存中会有703页。您的机器可能无法分配那么多内存,ImageMagick将使用磁盘存储像素,这将降低性能。

可以使用MagickReadSettings类的FrameIndex属性指定要读取的页面。如果指定的页面太高,则会引发异常(要求Magick.NET 7.0.0.005或更高版本),并显示一条消息,说明您正在请求无效页面。您需要这样做,因为ImageMagick不知道PDF文件的页数。下面是一个如何做到这一点的例子。

int page = 0;
while (true)
{
  MagickReadSettings settings = new MagickReadSettings()
  {
    FrameIndex = page
  };
  try
  {
    using (MagickImage image = new MagickImage(@"C:YourFile.pdf", settings))
    {
      // Do something with the image....
    }
  }
  catch (MagickException ex)
  {
    if (ex.Message.Contains("Requested FirstPage is greater"))
      break;
    else
      throw;
  }
  page++;
} 

相关内容

  • 没有找到相关文章

最新更新