Преобразование PDF в изображения с помощью ImageMagick.NET - как установить DPI - PullRequest
7 голосов
/ 27 мая 2010

Я пытаюсь конвертировать 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;
    }
}

Проблема : ЭТО СМОТРЕТЬ, КАК КРЫЛО изображение почти не читается. проблема, которую я понял, состоит в том, что он использует 72 DPI по умолчанию ImageMagick. и я не могу найти способ установить его (96dpi или 120dpi дает хорошие результаты) через оболочку .Net.

Я что-то упустил, или на самом деле нет способа установить это через эту обертку?

Спасибо

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Установите плотность в MagickReadSettings, прежде чем читать.

            MagickImage image = new MagickImage();
            MagickReadSettings settings = new MagickReadSettings();
            settings.Density = new Density(1000);
            image.Read(file,settings);    
1 голос
/ 29 мая 2010

Я кратко рассмотрел это.

Свойство 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));
+   }
 }

К сожалению, похоже, что ошибка не позволяет нам устанавливать качество рендеринга при выполнении итерации по страницам 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

Если номер страницы выходит за пределы диапазона, вы получаете исключение raw C ++.В то время как вы можете перехватить его в C # , оболочка, вероятно, должна включать класс исключений .NET для представления ошибок ImageMagick.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...