使用ImageMagick.NET将PDF转换为图像 - 如何设置DPI

问题描述 投票:6回答:2

我正在尝试将pdf文件转换为图像。 ImageMagick是一个很棒的工具,使用命令行工具可以得到我想要的结果。

但我需要在我的代码中执行此操作,因此添加了对http://imagemagick.codeplex.com/的引用。以下代码示例将pdf的每个页面呈现为图像:

MagickNet.InitializeMagick();
using (ImageList im = new ImageList())
{
    im.ReadImages(@"E:\Test\" + fileName + ".pdf");
    int count = 0;
    foreach (Image image in im)
    {
        image.Quality = 100;
        image.CompressType = mageMagickNET.CompressionType.LosslessJPEGCompression;
        image.Write(@"E:\Test\" + fileName + "-" + count.ToString() + ".jpg");
        ++count;
    }
}

问题:IT看起来像CRAP渲染的图像难以读取。我意识到的问题是它使用ImageMagick的默认72 DPI。我无法通过.Net包装器找到设置它的方法(96dpi或120dpi给出好的结果)。

我错过了什么,或者真的没有办法通过这个包装器设置它?

谢谢

c# pdf imagemagick
2个回答
1
投票

我对此进行了简要介绍。

Image.Resolution属性可用于设置PDF呈现分辨率,但ImageMagick.NET包装器不会公开该属性。

将缺少的属性添加到Image类非常简单。

Index: ImageMagickNET/Image.h
===================================================================
--- ImageMagickNET/Image.h  (revision 59374)
+++ ImageMagickNET/Image.h  (working copy)
@@ -532,6 +532,13 @@
        }


+       // Vertical and horizontal resolution in pixels of the image.
+       property Geometry^  Density
+       {
+           void set(Geometry^);
+       }
+
+
        //----------------------------------------------------------------
        // IO
        //----------------------------------------------------------------
Index: ImageMagickNET/Image.cpp
===================================================================
--- ImageMagickNET/Image.cpp    (revision 59374)
+++ ImageMagickNET/Image.cpp    (working copy)
@@ -1099,5 +1099,9 @@
        return bitmap;
    }

+   void Image::Density::set(Geometry^ density_)
+   {
+       image->density(*(density_->geometry));
+   }
 }

不幸的是,a bug似乎阻止我们在您尝试执行时迭代PDF页面时设置渲染质量。

另一种选择是分别打开每个页面:

Image image = new Image();
image.Density = new Geometry("1000");  // 1000 dpi
image.Read(@"C:\u\test.pdf[2]");       // Open the 3rd page, index 0 is the first

如果页码超出范围,则会出现原始C ++异常。虽然you can catch it in C#包装器应该包含一个.NET异常类来表示ImageMagick错误。


1
投票

在阅读之前在MagickReadSettings中设置密度。

            MagickImage image = new MagickImage();
            MagickReadSettings settings = new MagickReadSettings();
            settings.Density = new Density(1000);
            image.Read(file,settings);    
© www.soinside.com 2019 - 2024. All rights reserved.