2012-08-06 31 views
1

比较TIFF和PDF文件我要找的示例代码或VB,.NET环境第三方工具,可以比较TIFF和PDF文件(视觉比较),并返回true或false。用vb.net

我的要求是将tiff文件转换为pdf,我使用iTextSharp,但我现在需要证明转换后,没有任何改变使用vb.net程序(为什么?)我不知道,但我需要为他们提供这样的服务)。

让我知道如果你们知道任何这样的工具,我正在寻找,但所有我得到的是将一种格式转换为另一种或比较相同格式的文件

+0

我不认为你可以从语法上证明两种不同的文件格式产生相同的视觉效果。您可以打印到PCL并比较这些文件,但仅仅因为文件不相同并不意味着打印出来的图像与人眼不一样。 – Paparazzi 2012-08-06 19:22:26

+0

是的,这正是我所说的,但我被要求找出是否有办法。 – venu 2012-08-07 18:04:19

回答

2

你可以尝试重新提取TIFF工具从PDF该图像的原始数据与原来的TIFF文件的原始数据进行比较。

由于PDF格式支持嵌入的TIFF文件,你的客户可能只是想确保你没有重新压缩的图像为其它格式,并在这一过程中,质量有所下降。这是一个合理的关注。

充分利用你的图像文件的原始数据:

由于您使用的iText,1页TIFF文件你也许可以做到利用该方法Image.rawData()得到这个数据。您可以通过使用该方法TiffImage.getTiffImage

充分利用你的PDF文件中的原始数据创建您的TIFF文件,该Image类的一个实例:

您可以按照流程解释here,那么你可以得到的原始数据通过使用方法PdfReader.GetStreamBytes

您可以逐字节比较流,也可以在创建PDF时将它们保存为文件,以便以后可以使用它们在使用命令行工具时进行比较,也可以计算一个MD5散列并使用它。

我没有测试过这种方法,但我相信它会工作,因为没有涉及TIFF元数据。

+0

是的,听起来不错,但是你能告诉我一个样本还是可以比较tiff格式文件的工具吗?我知道bitcompare工具可以比较pdf,不确定tiff。 – venu 2012-08-06 16:00:56

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:

  1. 产生的delta.pdf将完全白色的,如果没有视觉上的差异。
  2. 的不同的像素会变成红色。
  3. 生成的文件将使用默认的72dpi分辨率,可能无法发现非常小的像素差异。

甚至可以简化这样的命令:

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) 

此OU tput适合自动单元测试。您可以评估这两个数字,很容易计算出“红色像素”与“白色像素”比,然后决定返回PASSED基于一定的阈值失败(如果你不严格需要“零红”像素)。

+0

我刚刚试了一下,我有“的ImageMagick-6.7.8-Q16”,你在这里提供良好的工作为TIF至TIF文件比较的样本,但是当我尝试TIF到PDF,它只是简单地说:PDF文件不可用。 – venu 2012-08-07 16:52:08

+0

@venu:ImageMagick的无法处理的PDF文件本身,它需要一个Ghostscript的安装,它可以作为其“*委托*”使用。也许这是问题? – 2012-08-07 20:14:27

+0

@venu:嗯,也许你的ImageMagick无法通过HTTP访问PDF文件。然后,你必须通过其他方式下载这两个文件,并运行本地访问文件的命令:'比较boson1.pdf [1] boson2。pdf [1] -compose src ...' – 2012-08-07 20:16:25