Parece que no puedo encontrar si Ghostscript puede simplemente detectar si el trabajo es en color o en escala de grises. Utilizo Ghostscript para la conversión de trabajos de impresión a PNG, pero también necesito información sobre el color del trabajo, por lo que no tengo que volver a buscarlo píxel por píxel.Detección de color Ghostscript
Respuesta
Un (relativamente nuevo) dispositivo Ghostscript llamado inkcov
(necesita Ghostscript v9.05 o posterior) puede detectar de forma fiable si una página PDF usa color o no.
Muestra la cobertura de tinta para las tintas CMYK, por separado para cada página (para los colores RGB, realiza una conversión silenciosa al espacio de color CMYK internamente).
Para investigar y demostrar sus funciones, generar primero un ejemplo PDF con la ayuda de Ghostscript:
gs \
-o color-or-grayscale-test.pdf \
-sDEVICE=pdfwrite \
-g5950x2105 \
-c "/F1 {10 80 moveto /Helvetica findfont 64 scalefont setfont} def" \
-c "F1 (100% 'pure' black) show showpage" \
-c "F1 .5 .5 .5 setrgbcolor (50% 'rich' rgbgray) show showpage" \
-c "F1 .5 .5 .5 0 setcmykcolor (50% 'rich' cmykgray) show showpage" \
-c "F1 .5 setgray (50% 'pure' gray) show showpage"
Mientras todos las páginas aparecen al ojo humano no utilizar ningún color en absoluto, páginas 2 y 3 realmente mezclan sus valores grises aparentes del color. Pero ninguno de los colores es directamente visible (a menos que su monitor esté muy mal ajustado).
vistazo a las páginas PDF resultantes (convertido a PNG para la visualización más fácil a través de la web):
En la industria de preimpresión, se utilizan con frecuencia los negros o tonos de gris 'ricos'. La expresión 'rico' negro o gris se usa para expresar el hecho de que estos tonos no están hechos de tóner o tinta puramente negros, sino que tienen componentes de color mezclados para que parezcan más brillantes y saturados.
Ahora compruebe la cobertura de tinta de cada página:.
gs -o - -sDEVICE=inkcov color-or-grayscale-test.pdf
[...]
Page 1
0.00000 0.00000 0.00000 0.05040 CMYK OK
Page 2
0.05401 0.05401 0.05401 0.05401 CMYK OK
Page 3
0.05799 0.05799 0.05799 0.00000 CMYK OK
Page 4
0.00000 0.00000 0.00000 0.04541 CMYK OK
(Un valor de 1,00000 mapas de cobertura de tinta del 100% para el canal de color correspondiente Así 0.05040
en la primera línea del resultado significa 5.04 %
del área de la página está cubierto por la tinta de negro) por lo tanto el resultado dado por Ghostscript de inkcov
es exactamente el esperado:.
- páginas 1 + 4 no utilice cualquiera de C (cian), M (magenta), Y (amarillo) colores, pero solo K (negro).
- páginas 2 + 3 utilizan tinta de colores C (cian), M (magenta), Y (amarillo), pero no K (negro) en absoluto.
Ahora vamos a convertir todas las páginas del PDF original para usar el espacio de color DeviceGray
:
gs \
-o only-black-ink.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/Gray \
-dProcessColorModel=/DeviceGray \
color-or-grayscale-test.pdf
...y comprobar la cobertura de tinta de nuevo:
gs -q -o - -sDEVICE=inkcov only-black-ink.pdf | grep -v Page
0.00000 0.00000 0.00000 0.05040 CMYK OK
0.00000 0.00000 0.00000 0.05401 CMYK OK
0.00000 0.00000 0.00000 0.05799 CMYK OK
0.00000 0.00000 0.00000 0.04541 CMYK OK
Una vez más, exactamente el resultado esperado en el caso de las conversiones de color exitosos!
Un nuevo dispositivo de salida ha dejado esta respuesta obsoleta, consulte la respuesta aceptada.
Hasta 2011, el archivo debía ser rasterizado para ver una salida. Dado que el PDF/PS es una descripción de cómo se ve el archivo, que se procesa mientras se rasteriza. Incluso si pudieras hacer esto con ghostscipt, estoy seguro de que necesitaría rasterizar/interpretar el archivo primero y luego mirar el resultado, por lo que si tienes el png, también podrías hacerlo tú mismo, lo que requerirá menos CPU que el procesamiento del archivo. archivo de nuevo con GS.
... y estoy bastante seguro de que su afirmación * "no puede hacer esto" * fue correcta hasta hace aproximadamente un año, pero ya no es así :-) - Por favor, elimine (o edite) su respuesta, antes de que se baje la votación ... :-) –
- 1. Detección de color opencv
- 2. Detección de color de imagen usando Python
- 3. detección de color principal en Python
- 4. ANDROID - detección de color usando openCV - ¿cómo?
- 5. Detección de color con la cámara Android
- 6. Ghostscript rotar páginas
- 7. C# Ghostscript Wrapper
- 8. Ghostscript: PDF total de páginas
- 9. Ghostscript Multipágina PDF a PNG
- 10. División de un PDF con Ghostscript
- 11. ¿Qué significa este mensaje de error Ghostscript?
- 12. Cómo convertir svg a eps en ghostscript
- 13. Usando Ghostscript para convertir JPEG a PDF
- 14. Use Ghostscript para convertir PCL a PostScript
- 15. Detección de umbrales en el espacio de color HSV (desde RGB) usando Python/PIL
- 16. Procesamiento de imagen/detección de color en R: ¿qué biblioteca debo usar?
- 17. Elegir los límites HSV superior e inferior correctos para detección de color con`cv :: inRange` (OpenCV)
- 18. Uso de GhostScript para obtener el tamaño de página
- 19. Conexión no wifi con detección de detección de teléfono
- 20. Detección de línea | Detección de ángulo con Java
- 21. ¿Es posible la detección de hits HTML5?
- 22. Detección dinámica de HTML5 en vim
- 23. Cambiar el tamaño de un PDF usando Ghostscript
- 24. ¿Qué causa que Ghostscript devuelva un error de -100?
- 25. La conversión de Ghostscript Postscript a PNG está sobre saturada
- 26. Recortar un cuadro de recorte PDF/Adding usando Ghostscript
- 27. Cómo configurar el tamaño de página personalizado con Ghostscript
- 28. Detección móvil
- 29. navegador detección
- 30. Detección de idioma
Esto también es una manera rápida si necesita estimar la cobertura del tóner para un archivo de impresión. –
En caso de que alguien necesite hacer esto en ruby, aquí hay una gema https://rubygems.org/gems/pdf_colored_pages que genera una matriz que contiene los números de página (por ejemplo, 1,3,4) o una cadena de rango como '1,3 -4 ', al analizar la salida inkcov de ghostscript. – RedRoosterMobile