在数字图像处理领域,TIFF和PDF是两种非常常见的文件格式。它们都支持将多个页面存储在一个文件中,并且允许每个页面具有不同的大小和压缩方式。然而,这两种格式之间也存在一些差异,了解这些差异有助于在实际应用中做出更合适的选择。
TIFF文件是一个包含压缩图像和元数据的容器。TIFF中的每个单独帧可以使用多种不同的压缩方法之一进行压缩,具体取决于帧中图像的性质。可用的压缩格式包括JPEG、LZW(类似于GIF)、Flate(类似于PNG),以及一些针对1位每像素(黑白)图像调整的格式(如Group 3、Group 4和基于霍夫曼的行程长度编码方法)。此外,如果解码和编码速度很重要,还可以选择不进行压缩。另外,单独的帧可以存储为条带或瓦片,这样可以在不需要解码整个页面的情况下访问图像的部分。
由于原始规范的不明确,特别是与所谓的“旧式”JPEG(被“新式”取代)有关的问题,导致了方言的大量出现。随Windows XP和Vista附带的标准编解码器甚至不尝试读取“旧式”,因为很难明确定义它到底是什么。对各种旧式变体的支持通常只能在第三方工具包中找到,例如DotImage .NET TIFF SDK。
PDF最初由Adobe开发,作为一种文档的归档格式,但经常用于存储图像,因为它可以包含多个页面。PDF是一个规范良好的格式,Acrobat Reader或等效软件几乎安装在每台机器和许多移动设备上。与TIFF一样,PDF可以包含多个页面,每个单独的页面可以根据其内容进行压缩。
与TIFF一样,PDF可以将图像存储为JPEG、Deflate(类似于PNG)和Group 4。此外,它还支持两种高级编解码器。第一种是JPEG 2000,适用于照片,与相同文件大小的JPEG相比,损失的质量要少得多。第二种是JBIG2,针对1位黑白图像进行调整。
由于PDF旨在包含不仅仅是图像,它们非常适合存储已经进行过光学字符识别(OCR)的图像结果。识别出的文本可以准确地放置在代表文本的像素后面。如果这样做了,生成的PDF被称为可搜索PDF,搜索引擎将对其进行索引,一些查看器将允许在其中选择和搜索文本。可以使用DotImage .NET OCR和可搜索PDF SDK创建可搜索PDF。
如果不进行OCR图像,或者进行了OCR并希望将结果分开保存;存储大小是一个重要因素;需要查看图像的每个人都有查看软件的访问权限(如果需要,可以使用DotImage .NET TIFF查看SDK创建自定义查看器);需要与WANG注释格式保持兼容性;需要以部分方式访问非常大的页面(TIFF支持瓦片模式,允许非常快速地访问图像的部分 - DotImage的TIFF SDK直接支持创建和使用这种风格)。
如果对图像进行了OCR并希望将结果与图像一起保存(创建可搜索PDF);组织要求使用PDF/A等归档格式以符合合规性目的;希望用户能够在不安装特殊查看器的情况下查看文档,并且他们可能已经安装了PDF查看器,如Acrobat Reader;注释图像并希望使用Acrobat Reader的用户能够看到注释,因此将它们存储在PDF中作为PDF兼容注释(使用DotImage的.NET PDF SDK可以轻松做到)。
在.NET中将TIFF和PDF相互转换通常需要第三方.NET PDF/TIFF SDK,如DotImage。以下是在两种格式之间进行转换的示例代码:
C#
private void Convert(string inFile, string outFile, MultiFramedImageEncoder encoder)
{
using (ImageSource src = new FileSystemImageSource(inFile, true))
{
using (Stream s = File.OpenWrite(outFile))
{
encoder.Save(s, src, null);
}
}
}
VB
Private Sub Convert(ByVal inFile As String, ByVal outFile As String, ByVal encoder As MultiFramedImageEncoder)
Using src As ImageSource = New FileSystemImageSource(inFile, True)
Using s As Stream = File.OpenWrite(outFile)
encoder.Save(s, src, Nothing)
End Using
End Using
End Sub
要将TIFF转换为PDF,请按如下方式调用Convert():
C#
Convert(tiffFileName, pdfFileName, new PdfEncoder());
要将PDF转换为TIFF,请按如下方式调用它:
C#
Convert(pdfFileName, tiffFileName, new TiffEncoder());
为了读取PDF,将需要DotImage PDFReader Add-on SDK,并需要在应用程序中读取任何PDF之前调用此代码一次:
C#
RegisteredDecoders.Decoders.Add(new PdfDecoder());