墨水覆盖率结果的差异:ghostscript inkcov与tiffsep方法(与APfill)对比

时间:2019-04-14 12:42:15

标签: python ghostscript

寻找一种方法来获取pdf文件中的墨水覆盖率,以为打印作业提供报价,我遇到了一个我无法理解的歧义。 比较这三种方法,墨水覆盖率结果有所不同。

搜索网络时,我们发现APFill(试用版)可以完成此工作:测试文件给出以下结果:

ApFill Result

我一直在寻找通过开源方法获得相同结果的方法。由于APFill使用Ghostscript,因此我将inkcov设备用于以下结果:

gs -o - -sDEVICE=inkcov testfile.pdf

得出以下结果:

Page 1
 1.00000  1.00000  1.00000  0.76546 CMYK OK

这显然与ApFill的结果不同。考虑到测试文件不是几乎完整的“丰富的黑色”填写文档,Ghostscript结果似乎也是错误的。

因此,我进行了进一步的研究,并使用Ghostscript tiffsep设备按颜色分离将pdf分为tif文件

gs -o test.tif -sDEVICE=tiffsep -r300x300 testfile.pdf

我曾经在python中使用numpy和opencv来计算像素百分比值:

img = cv2.imread('test(Cyan).tif', 0)
inkcovIMG = img/np.full(img.shape, 255)
print (1-np.mean(inkcovIMG))
img = cv2.imread('test(Magenta).tif', 0)
inkcovIMG = img/np.full(img.shape, 255)
print (1-np.mean(inkcovIMG))
img = cv2.imread('test(Yellow).tif', 0)
inkcovIMG = img/np.full(img.shape, 255)
print (1-np.mean(inkcovIMG))
img = cv2.imread('test(Black).tif', 0)
inkcovIMG = img/np.full(img.shape, 255)
print (1-np.mean(inkcovIMG))

这给出了以下结果:

0.5188357078732435
0.4992922045543696
0.5949687851445294
0.5271387924864341

与APFill结果大致相同。

所以我的问题是:GhostScript inkcov设备是否只计算使用颜色的像素数量,而不是同时考虑单独像素的颜色数量?还是我正在监督某事?

感谢您的任何评论!

1 个答案:

答案 0 :(得分:1)

简单的答案是您使用了错误的设备:-)令人惊讶的是,有两个墨水覆盖率设备以不同的方式计算覆盖率。您正在使用inkcov设备,请尝试改用ink_cov设备。

对我来说,给出结果:

GPL Ghostscript GIT PRERELEASE 9.28 (2019-04-04)
Copyright (C) 2019 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 1.
Page 1
51.86353 49.92667 59.47390 52.62051 CMYK OK

这与您的tiff32结果极为接近。由于将图像样本放置在设备像素上的方式,更改分辨率将产生完全不同的结果。

设备源代码位于ghostpdl / devices / gdevicov.c中,“ inkcov”设备带有注释:

 * columns 1 through 4 give the fraction of pixels containing
 * c, m, y and black ink.

ink_cov设备评论说:

/*  cov_write_page2 gave ink coverage values not ratecoverage */

所以一个是包含(CMYK)着色剂的像素百分比,另一个是整个页面上的墨水百分比。