介绍说明:
- 此答案涵盖赏金问题;即:我们如何
将多个文件转换为 1 个 tiff?例如,假设有 pdf,
jpeg、png,我想用它们创建 1 个 tiff?
- 在这个答案中,我使用 https://imagemagick.org/index.php 的 .net 实现来进行图像处理,并使用 Ghostscript 来帮助读取 AI/EPS/PDF/PS 文件,以便我们可以将其转换为可信且官方来源的图像文件。李>
- 在我回答了这个问题后,我在电子邮件中收到了一些额外的问题,询问其他合并选项,因此我扩展了我的答案。
IMO 有两个步骤可以实现您的目标:
- 安装 pdf 转换所需的工具
- 从源中获取所有图像,包括 pdf 格式的文件,并将它们合并在一起
在一个 tiff 文件中。
1。安装有助于 Pdf 到图像转换的工具:
仅当您打算转换 AI/EPS/PDF/PS 文件格式时才需要执行第 1 步。否则直接跳到第2步。
为了使将 pdf 转换为任何图像格式成为可能,我们需要一个可以读取 pdf 文件的库,并且我们需要一个将其转换为图像类型的工具。为此,我们需要安装Ghostscript(GNU Affero 通用公共许可证)。
此后,我们需要在 Visual Studio 中为 .net 安装 ImageMagick.net,nuget link。
到目前为止一切顺利。
2。代码部分
第二步也是最后一步是我们需要从文件夹位置读取文件(png、jpg、bmp、pdf 等)并将每个文件添加到MagickImageCollection,然后我们有几个选项可以合并使用AppendHorizontally、AppendVertically 、Montage 或多页 Tiff。 ImageMagick 有很多功能,例如调整大小、分辨率等,这只是演示合并功能的示例:
public static void MergeImage(string src, string dest, MergeType type = MergeType.MultiplePage)
{
var files = new DirectoryInfo(src).GetFiles();
using (var images = new MagickImageCollection())
{
foreach (var file in files)
{
var image = new MagickImage(file)
{
Format = MagickFormat.Tif,
Depth = 8,
};
images.Add(image);
}
switch (type)
{
case MergeType.Vertical:
using (var result = images.AppendVertically())
{
result.AdaptiveResize(new MagickGeometry(){Height = 600, Width = 800});
result.Write(dest);
}
break;
case MergeType.Horizontal:
using (var result = images.AppendHorizontally())
{
result.AdaptiveResize(new MagickGeometry(){Height = 600, Width = 800});
result.Write(dest);
}
break;
case MergeType.Montage:
var settings = new MontageSettings
{
BackgroundColor = new MagickColor("#FFF"),
Geometry = new MagickGeometry("1x1<")
};
using (var result = images.Montage(settings))
{
result.Write(dest);
}
break;
case MergeType.MultiplePage:
images.Write(dest);
break;
default:
throw new ArgumentOutOfRangeException(nameof(type), type, "Un-support choice");
}
images.Dispose();
}
}
public enum MergeType
{
MultiplePage,
Vertical,
Horizontal,
Montage
}
运行代码
public static void Main(string[] args)
{
var src = @"C:\temp\Images";
var dest1 = @"C:\temp\Output\MultiplePage.tiff";
var dest2 = @"C:\temp\Output\Vertical.tiff";
var dest3 = @"C:\temp\Output\Horizontal.tiff";
var dest4 = @"C:\temp\Output\Montage.tiff";
MergeImage(src, dest1);
MergeImage(src, dest2, MergeType.Vertical);
MergeImage(src, dest3, MergeType.Horizontal);
MergeImage(src, dest4, MergeType.Montage);
}
这是 C:\temp\Images 中的 4 个输入文件:
运行代码后,我们在 C:\temp\Output 下得到 4 个新文件,如下所示:
4页多页Tiff
4张图片垂直合并
4张图片水平合并
4 图像蒙太奇合并
最后说明:
- 可以使用 System.Drawing 将多个图像合并到 tiff;并使用 System.Drawing.Imaging;不使用 ImageMagick,但 pdf 确实需要第三方转换库或工具,因此我将 Ghostscript 和 ImageMagick 用于 C#。
- ImageMagick 有很多功能,所以您可以更改输出文件的分辨率、大小等。它是公认的库。
免责声明:这个答案的一部分来自我的个人网站https://itbackyard.com/how-to-convert-ai-eps-pdf-ps-to-image-file/,源代码在 github。