我在VB,.Net环境中寻找示例代码或第三方工具,可以比较tiff和pdf文件(可视化比较)并返回true或false。
我的要求是将tiff文件转换为pdf,我使用iTextSharp,但我现在需要证明转换后,使用vb.net程序没有任何改变(为什么?。我不知道,但我需要为他们提供这样的服务。)
让我知道,如果你们知道任何这样的工具,我正在搜索,但我得到的只是将一种格式转换为另一种格式或比较相同格式文件的工具
答案 0 :(得分:2)
您可以尝试从PDF中重新提取tiff,并将此图像的原始数据与原始tiff文件的原始数据进行比较。
由于PDF格式支持嵌入TIFF文件,因此您的客户可能只是想确保您没有将图像重新压缩为其他格式,并且在此过程中会有一些质量损失。这是一个合理的担忧。
从图像文件中获取原始数据:
由于您使用的是iText,因此对于1页的tiff文件,您可以使用Image.rawData()
方法获取此数据。您可以使用方法TiffImage.getTiffImage
Image
类的实例
从PDF文件中获取原始数据:
您可以按照here解释的流程,然后使用方法PdfReader.GetStreamBytes
获取原始数据您可以逐字节比较流,或者您可以在创建PDF时将它们保存到文件中,以便以后使用命令行工具将它们用于比较,或者您可以计算MD5哈希并使用它代替。
我没有测试过这种方法,但我相信它会起作用,因为不涉及TIFF元数据。
答案 1 :(得分:2)
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:如果这种方法原则上适合您,您可以修改输出格式:您不需要真正使用“红色像素图像”中的视觉差异。您可以改为计算每个独特的白色(相等)和红色(不同)像素,然后根据红色与白色相比的百分比做出决定,这是“好”还是“坏”,最后返回'true'或'false '相应(显示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 (如果你并不严格需要“零红色”像素。)