Esta pregunta contiene en realidad dos cuestiones distintas:
En primer lugar la pregunta es sobre los DPI de un documento, y el archivo en cuestión es un archivo PDF. Los archivos PDF son complicados por naturaleza, y en realidad permiten que un solo documento contenga objetos de diferentes DPI.
Por lo tanto, aunque el PDF especifica un DPI para el propio documento, esto significa que no siempre tiene sentido determinar mediante programación el DPI de un documento, simplemente porque no tiene que haber un único DPI para todo el contenido del documento.
El comando que se da en la pregunta lee los números del documento PDF en sí, pero lo que se quiere es obtener la información sobre el objeto de imagen real dentro del PDF así:
pdfimages -list document.pdf
Esto listará el número de píxeles por pulgada para cada objeto de imagen contenido en el documento en las columnas "x-ppi" y "y-ppi".
Si los archivos PDF contienen siempre una sola imagen, puede leer el PPI de este comando como forma de obtener el PPI de forma programada. Tenga en cuenta que puede diferir del valor que tiene de identify
para el documento PDF en su conjunto, aunque el archivo sólo contenga una imagen.
La pregunta del secundario se refiere a las imágenes en general: no hay formatos de archivo. Algunos de los formatos de archivo más comunes para las imágenes son los archivos JPEG y PNG, que son más simples que los archivos PDF.
En el caso de los archivos PNG, los PPP están incrustados en el fragmento pHY que describe las dimensiones físicas de los píxeles de la imagen. El DPI puede ser no especificado o especificado en términos de un número entero de píxeles por metro. Nota: no se almacena en píxeles por pulgada o píxeles por centímetro, sino en píxeles por metro. Esto tiene implicaciones para la precisión de los valores.
En el caso de los archivos JPEG, los PPP están incrustados en el segmento del marcador JFIF APP0 que describe la densidad X e Y de la imagen como números enteros. La unidad se describe igualmente en ese segmento como no especificada, píxeles por pulgada o píxeles por centímetro.
Así, algunos archivos JPEG tendrán su densidad especificada en píxeles por pulgada, y otros como píxeles por centímetros.
En ambos casos se puede utilizar identify
para extraer la información DPI de los archivos:
identify -units PixelsPerInch -format '%[resolution.x] x %[resolution.y] %[units]' file.png
identify -units PixelsPerInch -format '%[resolution.x] x %[resolution.y] %[units]' file.jpeg
Tenga en cuenta que en este caso le pedimos a ImageMagick que convierta la información de densidad real a píxeles por pulgada en lugar de obtener el valor como píxeles por centímetro unas veces, y otras como píxeles por pulgada. ImageMagick no soporta obtener los números en su unidad nativa, ya que sólo esas unidades pueden ser emitidas por el programa - y por ejemplo los archivos PNG los almacenan como píxeles por metro (como se describió anteriormente) - por lo que una conversión tiene lugar en esos casos de todos modos.
Nota final, y probablemente la más importante: En el caso de las imágenes de mapa de bits, como los archivos JPEG y PNG, los datos reales de la imagen son "agnósticos en cuanto a los PPP". Esto significa que si se cambia el DPI del archivo de, por ejemplo, 72x72 a 200x200, los datos reales de la imagen no cambian en absoluto. La información sobre la densidad es sólo un campo de metadatos en el archivo, y no afecta como tal a los datos reales de la imagen. Sólo entra en juego al imprimir la imagen en papel físico.
Lo que esto significa es que cuando se procesan "imágenes aleatorias" de diferentes fuentes, hay un alto riesgo de que la información de DPI en la imagen sea sólo algún valor por defecto del software de procesamiento de imágenes utilizado. Esto significa que a menudo verá 72x72 DPI, pero el valor no tiene ninguna relación con los datos reales de la imagen o con el tamaño que el creador de la imagen realmente pensó que tendría en el mundo físico (si es que pensó algo al respecto). Por lo tanto, normalmente no es una buena idea confiar en la información de los PPP para esas "imágenes aleatorias".