网络上找了一堆博文,实验之后基本上很少能够有用的,很少能提供完整的Demo
和Method
,故写本篇文章来做记录。
1、新建项目UnitTestProject
2、右击项目==>>管理Nuget程序包
==>Magick.NET-Q16-AnyCPU
安装最新版本7.14.5
High-Dynamic Range (HDR) image
注:Q8 Q16
指HDRI
分别表示8位 和16位,AnyCPU、x64、x86
指计算机是32位还是64位系统,选择AnyCPU
3、下载安装ghostscript
(根据所在服务器下载对应32还是64位版本)
http://ghostscript.com/download/gsdnld.html
如果不安装ghostscript
,magick.net
在执行Read
函数读取pdf
时会报错误.
4、加入以下方法,并添加引用 using ImageMagick;
/// <summary>
/// 将PDF所有页转换为图片并返回图片路径
/// </summary>
/// <param name="pdfPath">pdf文件路径</param>
/// <param name="imgPath">生成图片路径</param>
/// <param name="imgName">图片名称前缀</param>
public List<string> GetPdfAllPageImgs(string pdfPath, string imgPath, string imgName)
{
var list = new List<string>();
try
{
MagickReadSettings settings = new MagickReadSettings();
settings.Density = new Density(72, 72); //设置格式
using (MagickImageCollection images = new MagickImageCollection())
{
images.Read(pdfPath, settings);
int pageCount = images.Count;
for (int i = 0; i < pageCount; i++)
{
IMagickImage image = images[i];
image.Alpha(AlphaOption.Remove);//遇到电子签章的此属性可以解决黑屏问题
image.Format = MagickFormat.Jpeg;
string path = imgPath + $"{imgName}_{i}.jpg";//相对路径
image.Write(path);
list.Add(path);
}
}
}
catch (Exception ex)
{
}
return list;
}
5、在TestMethod
方法中调用测试
[TestMethod]
public void TestMethod()
{
try
{
string filepath = @"D:\PDFFF\1565265812212742552810.pdf";
string imgpath = @"D:/PDFFF/";
var pathList= PdfHelper.GetPdfAllPageImgs(filepath, imgpath, "imgName");
}
catch (Exception ex)
{
}
}
6、右击TestMethod
方法==>调试测试(注意打上断点)
请根据自己需要进行函数改写,本文只是示例,加入文件存储到云、文件检测等等
Demo地址(CSDN好像不可以设置免费下载了。。。有点不清真啊)
https://download.csdn.net/download/uianqian/11926634
Magick.NET
ImageMagick
是一个很强大的图像操作库,支持超过100 种的文件格式。而 Magick.NET
可以让你在 .NET
环境中使用ImageMagick
,而无需在系统中单独安装 ImageMagick
。
示例代码:
// Read first frame of gif image
using (MagickImage image = new MagickImage("Snakeware.gif"))
{
// Save frame as jpg
image.Write("Snakeware.jpg");
}
// Write to stream
MagickReadSettings settings = new MagickReadSettings();
// Tells the xc: reader the image to create should be 800x600
settings.Width = 800;
settings.Height = 600;
using (MemoryStream memStream = new MemoryStream())
{
// Create image that is completely purple and 800x600
using (MagickImage image = new MagickImage("xc:purple", settings))
{
// Sets the output format to png
image.Format = MagickFormat.Png;
// Write the image to the memorystream
image.Write(memStream);
}
}
// Read image from file
using (MagickImage image = new MagickImage("Snakeware.png"))
{
// Sets the output format to jpeg
image.Format = MagickFormat.Jpeg;
// Create byte array that contains a jpeg file
byte[] data = image.ToByteArray();
}