寻找一种方法来获取pdf文件中的墨水覆盖率,以为打印作业提供报价,我遇到了一个我无法理解的歧义。 比较这三种方法,墨水覆盖率结果有所不同。
搜索网络时,我们发现APFill(试用版)可以完成此工作:测试文件给出以下结果:
我一直在寻找通过开源方法获得相同结果的方法。由于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设备是否只计算使用颜色的像素数量,而不是同时考虑单独像素的颜色数量?还是我正在监督某事?
感谢您的任何评论!
答案 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)着色剂的像素百分比,另一个是整个页面上的墨水百分比。