различия в результатах покрытия чернилами: ghostscript inkcov против метода tiffsep (против APfill) - PullRequest
0 голосов
/ 14 апреля 2019

Ища способ получить чернильное покрытие из 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

, который я использовал для подсчета значений в процентах, используя numpy и opencv в python:

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 Ответ

1 голос
/ 15 апреля 2019

Простой ответ: вы используете не то устройство :-) Удивительно, но есть два устройства покрытия чернилами, которые рассчитывают покрытие по-разному. Вы используете устройство 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) -краситель, а другое - процентное содержание чернил на всей странице.

...