0 votos

Uso de la identificación de ImageMagick para determinar los DPI de un documento

En última instancia, estoy tratando de determinar el tamaño de una imagen en pulgadas para poder estar seguro de que se extiende correctamente en la impresora.

Si utilizo el comando identify document.pdf Obtengo la siguiente salida:

document.pdf PDF 612x792 612x792+0+0 16-bit sRGB 29289B 0.000u 0:00.000

Si divido 612 y 792 cada uno por 72 respectivamente, obtengo 8,5x11 que me indica el tamaño. Sé que esto es correcto porque lo he impreso. El problema es que no siempre va a ser 8,5x11 ni el DPI va a ser siempre el mismo (y yo no voy a estar ahí para "saber" cómo se imprimió/guardó).

De la página de ImageMagic sobre el uso de Identificar tienen un -verbose y un ejemplo de "cálculo de un tamaño de imagen a 72 DPI", ¡pero no dicen cómo han obtenido los DPI!

¿Cómo puedo determinar mediante programación los DPI de una imagen?

(Los gráficos están un poco fuera de mi ámbito y con el gran volumen de opciones de ImageMagick junto con los términos con los que no estoy familiarizado es un poco como beber de la manguera de incendios).

2voto

Douglas Puntos 10417

(Gracias a Tetsujin por sus útiles comentarios que me llevaron a la respuesta)

ImageMagick puede ser un poco confuso con su miríada de opciones cuando se intenta hacer algo. Hay un par de maneras de averiguar los DPI de una imagen. Ambas utilizan el identify comando.

Para los ejemplos de abajo, estoy usando una muestra, Foto libre de derechos de un iMac de Apple guardado nativamente como JPG y exportado como PNG.

  • Calcular manualmente el tamaño. Para ello, necesitamos dos datos, la resolución y las Unidades. En este caso, hemos tenido suerte porque las unidades están en PPI (píxeles por pulgada), así que la resolución tiene sentido: es de 72 PPI o 72 DPI

    identify -verbose apple_photo.jpeg | grep -E -i "resolution|units"                         
    Resolution: 72x72
    Units: PixelsPerInch

    Sin embargo, si el archivo de imagen es un PNG , las cosas se almacenan como PPCM o píxeles por centímetro. Emitiendo el mismo comando:

    % identify -verbose apple_photo.png | grep -E -i "resolution|units"
      Resolution: 28.34x28.34
      Units: PixelsPerCentimeter

    Esto nos dice que es 28,34 PPCM. Para obtener DPI tenemos que hacer un pequeño cálculo. 1 pulgada = 2,54 cm, así que para obtener los PPC multiplicamos eso por la resolución de la siguiente manera:

    2.54 * 28.34 = 71.9836 or 72DPI
  • Cálculo en tiempo real. De nuevo, al utilizar JPEG, sabemos que su resolución está en DPI, por lo que sólo tenemos que obtener el valor de la resolución utilizando la función -format flag y el porcentaje (%) secuencias de escape :

    identify -format "%[fx:resolution.x]" apple_photo.jpeg

    Dado que los archivos PNG están en PPCM, podemos utilizar el Expresiones FX y el porcentaje (%) secuencias de escape para calcular este valor. Aquí, estamos obteniendo el valor de la resolución y multiplicándolo por 2,54 para obtener DPI.

    % identify -format "%[fx:resolution.x*2.54] DPI" apple_photo.png
    71.9836 DPI

    Nota: Puede obtener las unidades utilizando la secuencia de escape %[units] aquí:

    % identify - identify -format `"%[units]"` apple_photo.jpeg

Calcula el tamaño. Ahora podemos calcular el tamaño (pulgadas) de la imagen. Para ello, utilizamos la función %[w] secuencia de escape para obtener el ancho en DPI o PPCM

    % identify -format "%[fx:w]" apple_photo.jpeg
    3004

Dividir por 72 para obtener las pulgadas

    % identify -format "%[fx:w/72] inches" apple_photo.jpeg
    41.7222 inches

1voto

Jose Chavez Puntos 645

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".

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X