我正在寻找 VB、.Net 环境下的示例代码或第三方工具,它可以比较 tiff 和 pdf 文件(视觉比较)并返回 true 或 false。
我的要求是将 tiff 文件转换为我使用 iTextSharp 所做的 pdf,但我现在需要证明转换后,使用 vb.net 程序没有任何改变(为什么?我不知道,但我需要向他们提供这样的服务)。
让我知道你们是否知道任何这样的工具,我正在搜索,但我得到的只是将一种格式转换为另一种格式或比较相同格式文件的工具
ImageMagick 的compare
命令可以很容易地做到这一点。
compare file.tif file.pdf -compose src delta.pdf
或者,假设多页 TIFF 和多页 PDF,逐页比较:
compare file.tif[0] file.pdf[0] -compose src delta_page1.pdf
compare file.tif[1] file.pdf[1] -compose src delta_page2.pdf
compare file.tif[2] file.pdf[2] -compose src delta_page3.pdf
[....]
(ImageMagick 的页面/图像索引从 [0] 开始,而不是 [1]!)。
了解 delta.pdf:
您甚至可以像这样简化命令:
compare file.tif file.pdf delta.pdf
生成的 delta.pdf 将命令行中的第一个文件(作为上下文)显示为浅灰色背景图像,并将差异覆盖为红色像素。当然,理论上你也可以颠倒每个命令的顺序:
compare file.pdf file.tif delta.pdf
但是,您应该知道,现实中出现的 PDF“白色”背景通常是透明的,而 TIFF 是真正的白色。这将导致出现很多像素差异。最好坚持我首先命名的顺序:-)
注意 1:所有这些比较都假设(当然)相同的页面图像尺寸和纵横比。(否则,您可能需要先缩放两个页面图像之一。)
注意 2:您几乎总是会发现细微的像素差异,具体取决于您的整体处理链。这完全取决于您想通过这种比较发现什么样的错误。有很多方法可以微调这个......
注意 3:如果这种方法原则上适用于您,您可以修改输出格式:您不需要真正使用“红色像素图像”中的视觉差异。您可以改为计算唯一的白色(相等)和红色(不同)像素,然后根据红色与白色的百分比来决定这是“好”还是“坏”,最后返回“真”或“假” ' 因此(显示 2 个 PDF 而不是 1/1 PDF/TIFF 的示例命令):
示例命令:
compare \
http://qtrac.eu/boson1.pdf[1] http://qtrac.eu/boson2.pdf[1] -compose src \
-define histogram:unique-colors=true \
-format %c \
histogram:info:-
样本输出:
56934: (61937, 0, 7710,52428) #F1F100001E1ECCCC srgba(241,0,30,0.8)
444056: (65535,65535,65535,52428) #FFFFFFFFFFFFCCCC srgba(255,255,255,0.8)
该输出非常适合自动单元测试。您可以评估这两个数字,轻松计算“红色像素”与“白色像素”的比率,然后根据某个阈值决定返回PASSED或FAILED(如果您不严格需要“零红色”像素)。
您可以尝试从 PDF 中重新提取 tiff,并将此图像的原始数据与原始 tiff 文件的原始数据进行比较。
由于 PDF 格式支持嵌入 TIFF 文件,您的客户可能只是想确保您没有将图像重新压缩为其他格式并且在此过程中存在一些质量损失。这是一个合理的担忧。
从图像文件中获取原始数据:
由于您使用的是 iText,因此对于 1 页 tiff 文件,您可以使用Image.rawData()
. 您可以使用TiffImage.getTiffImageImage
方法从 TIFF 文件创建此类的实例
从您的 PDF 文件中获取原始数据:
您可以按照这里解释的过程,然后您可以使用方法PdfReader.GetStreamBytes获取原始数据
您可以逐字节比较流,也可以在创建 PDF 时将它们保存到文件中,以便稍后使用命令行工具进行比较,或者您可以计算 MD5 哈希值并改用它。
我没有测试过这种方法,但我相信它会起作用,因为不涉及 TIFF 元数据。