首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ImageMagick.NET将PDF转换成图像-如何设置新闻部

使用ImageMagick.NET将PDF转换成图像-如何设置新闻部
EN

Stack Overflow用户
提问于 2010-05-26 20:33:02
回答 3查看 36.2K关注 0票数 8

我试图将pdf文件转换成图像。ImageMagick是一个很好的工具,使用命令行工具可以获得我想要的结果。

但我需要在代码中这样做,因此添加了对http://imagemagick.codeplex.com/的引用,下面的代码示例将pdf的每一页呈现为图像:

代码语言:javascript
复制
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;
    }
}

The problem:看起来糟透了,呈现出来的图像很难读。我意识到的问题是它使用了默认的72 DPI的ImageMagick。我无法找到通过.Net包装来设置它的方法(96 the或120 the提供了很好的结果)。

我是遗漏了什么,还是真的没有办法通过这个包装来设置它?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-29 05:26:56

我对此做了简短的调查。

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

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

代码语言:javascript
复制
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));
+   }
 }

不幸的是,臭虫似乎阻止我们在迭代PDF页面时设置呈现质量,就像您试图做的那样。

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

代码语言:javascript
复制
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++异常。尽管您可以在C#中捕捉到它,包装器可能应该包括一个.NET异常类,用于表示ImageMagick错误。

票数 2
EN

Stack Overflow用户

发布于 2019-04-24 09:29:46

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

代码语言:javascript
复制
            MagickImage image = new MagickImage();
            MagickReadSettings settings = new MagickReadSettings();
            settings.Density = new Density(1000);
            image.Read(file,settings);    
票数 2
EN

Stack Overflow用户

发布于 2019-12-06 16:52:06

更新参考资料后,我在官方的.NET网站上创建了一个ImageMagick包装器。

来源:https://github.com/dlemstra/Magick.NET

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2916555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档