En GIMP hay una manera muy simple de hacer lo que quiero. Solo tengo instalado el cuadro de diálogo alemán, pero intentaré traducirlo. Estoy hablando de ir Picture -> PrintingSize
y luego ajustar los valores X-Resolution
y Y-Resolution
que yo conozco como los llamados valores DPI. También puede elegir el formato que por defecto es Pixel/Inch
. (En alemán el diálogo es Bild -> Druckgröße
y allí X-Auflösung
y Y-Auflösung
)
Ok, los valores a menudo son 72
por defecto. Cuando los cambio a, por ejemplo, 300
esto tiene el efecto de que la imagen permanece igual en la computadora, pero si la imprimo, será más pequeña si la miras, pero todos los detalles siguen ahí, solo que más pequeños -> tiene una resolución más alta en el papel impreso (pero de menor tamaño ... lo cual está bien para mí).
A menudo hago eso cuando estoy trabajando con LaTeX, o para ser exactos con el comando pdflatex
en una máquina Ubuntu reciente. Cuando estoy haciendo el proceso anterior con GIMP manualmente, todo funciona bien. Las imágenes aparecerán más pequeñas en el PDF resultante pero con alta calidad de impresión.
Lo que intento hacer es automatizar el proceso de entrar en GIMP y ajustar los valores de DPI. Como se sabe que ImageMagick es excelente y lo usé para muchas otras tareas, traté de lograr mi objetivo con esta herramienta. Pero simplemente no hace lo que quiero.
Después de probar muchas cosas, creo que este es realmente el comando que debería ser mi amigo:
convert input.png -density 300 output.png
Esto debería establecer el DPI en 300, ya que puedo leer en cualquier parte de la web. Parece funcionar. Pero cuando reviso el archivo, permanece igual (EDITAR: que es lo que espero, como se explicó anteriormente).
file input.png output.png
input.png: PNG image data, 611 x 453, 8-bit grayscale, non-interlaced
output.png: PNG image data, 611 x 453, 8-bit grayscale, non-interlaced
Cuando uso este comando, parece que hizo lo que quería:
identify -verbose output.png | grep 300
Resolution: 300x300
PNG:pHYs : x_res=300, y_res=300, units=0
Curiosamente, viene la misma salida para lo input.png
que me confunde ... ¿entonces estos podrían ser los parámetros incorrectos para mirar?
Pero cuando ahora renderizo mi TeX con pdflatex
la imagen todavía es grande y borrosa. Además, cuando abro la imagen con GIMP nuevamente, los valores de DPI se establecen en 72
lugar de 300
. Así que en realidad no hubo ningún efecto.
Ahora cuál es el problema aquí. ¿Me estoy poniendo algo completamente mal? No puedo estar tan equivocado ya que todo funciona bien con GIMP.
Gracias por cualquier ayuda en esto. También estoy abierto a otras soluciones automatizadas que se realizan fácilmente en un sistema Linux.
fuente
^
icono a la izquierda de su respuesta), no solo 'aceptarla' tan pronto como tenga suficiente reputación personal (creo que necesita +15) ...Respuestas:
Especifique las unidades: parece que recuerdo haber tenido un problema cuando omití esta opción (aunque DPI debería ser el predeterminado), por ejemplo:
¿Sabe qué campos de datos incrustados utiliza GIMP para leer la resolución? ¿Tiene los suyos propios que anulan los estándares utilizados por ImageMagick? Por ejemplo, Photoshop usa
Photoshop:XResolution
y,Photoshop:YResolution
por lo tanto, debe configurarlos para que Photoshop reconozca una configuración de densidad (ImageMagick no puede hacer esto; usamos ExifTool).fuente
-density 300
antesinput.png
. Estaba convirtiendo archivos PDF. Gracias de cualquier manera.-set units PixelsPerInch -density 300
, simple-units
no funcionó independientemente del orden de las opciones.Tenga en cuenta que puede usar Exiftool para leer resoluciones. Por ejemplo,
Exiftool '-*resolution*' c.jpg
podría mostrarUnidad de resolución: pulgadas X Resolución: 300 Y Resolución: 300
Exiftool también puede establecer parámetros, pero como se indica en la página de
Image::ExifTool::TagNames
manual, Exiftool no puede escribir las etiquetas adicionales XResolution e YResolution.No sé si ImageMagick tiene opciones de cambio de resolución, pero me sorprendería si no lo hace. Además, es sencillo escribir scripts GIMP para automatizar tareas como esta, y también es posible cambiar resoluciones con pequeños programas. Por ejemplo, el siguiente es un programa en C (compilable mediante
gcc setRes.c -O3 -Wall -o setRes
) que lee los primeros bytes de un archivo jpeg, cambia las resoluciones a 300 y las reescribe. El programa como se muestra usa constantes para máquinas little-endian, como x86. Si se ejecuta en una máquina big-endian, debería terminar con un mensaje comoError: xyz may be not a .jpg file
, incluso si xyz es un archivo jpeg. Tenga en cuenta que no he probado las imágenes resultantes a través depdflatex
; probablemente le resulte útil publicar una pregunta en el tex SE .fuente
No pude descubrir cómo convencer a convertir para que solo agregue los metadatos y no vuelva a codificar mi mapa de bits [monocromo]; estaba expandiendo el archivo> 50%.
Descubrí que pngcrush (no es una herramienta ImageMagick) también puede agregar los metadatos de densidad. Esta línea de comando lo marca 600 ppp y permite otras optimizaciones, lo que redujo el tamaño del archivo en ~ 10%:
fuente
"Quiero cambiar DPI con Imagemagick sin cambiar el tamaño de byte real de los datos de imagen".
¡Esto es completamente imposible!
Porque:
Tampoco parece entender qué es DPI en realidad:
72dpi
.288dpi
.288dpi
un cuadrado de 1 pulgada, ya no es la misma imagen: habrá sufrido una extrapolación a través del controlador de la impresora o algún otro mecanismo de filtrado, y se habrá convertido en una imagen de 288x288 píxeles en lugar de una imagen de 72x72 píxeles ... )Si desea imprimir la imagen original de 72x72 píxeles como un cuadrado de 1 pulgada de ancho, pero a la vez
288dpi
, tendrá que reescalar la imagen (en este caso, ampliarla). Por cada 1 píxel en el original, necesitará 4 píxeles de la nueva imagen mejorada. Ahora hay diferentes algoritmos que se pueden usar para calcular qué valores de color deben tener estos 4 píxeles (3 de ellos nuevos píxeles):En cualquier caso, está creando una imagen más grande que consta de 288 filas de píxeles que tienen 288 píxeles de alto cada uno (288x288 píxeles).
Lo que Gimp hace por usted cuando pasa por "Imagen -> Tamaño de impresión": simplifica el proceso de volver a calcular los cambios necesarios en los tamaños absolutos de píxeles, lo que lo hace más fácil de usar. Para este propósito...
cm
,mm
oinch
) la impresión debe aparecer en papel.De acuerdo con estas dos piezas de información, Gimp calcula el número total de píxeles que debe usar (extrapolar a partir del número original de píxeles) para llenar el espacio solicitado en la resolución solicitada.
Sin embargo, ampliar una imagen ráster haciendo que contenga más píxeles no le agrega información real, y solo le agrega 'calidad', lo cual es ficticio. Puede parecer mejor para el ojo humano si su algoritmo de escalamiento es 'bueno'. Y se verá feo, si solo duplica, triplica o cuadruplica los píxeles existentes, como hacen algunos algoritmos simples.
Para imágenes ráster,
la configuración de DPI solo es relevante en el contexto de impresión o visualización . Debido a que las impresoras o monitores han dado resoluciones fijas. Por lo tanto, es información que solo ...
necesito saber.
Y la documentación de ImageMagick está totalmente de acuerdo conmigo:
Sin embargo, para imágenes vectoriales o formatos de archivo (como PDF o PostScript), la configuración de DPI es extremadamente importante en el contexto de rasterizarlos . Un DPI más alto transferirá más información de la imagen al formato ráster y, por lo tanto, conservará más detalles de la calidad original real. Al convertir una imagen vectorial de un tamaño dado en
mm
,cm
oinch
en una trama con un DPI más alto, se traducirá directamente en un mayor número de píxeles totales en la imagen.Además, ImageMagick no admite 'impresión' como tal. En cambio, ImageMagick solo ...
... pero para imprimir las imágenes manipuladas, debe usar un programa diferente.
Algunos formatos de imagen (TIFF, PNG, ...) admiten almacenar internamente una configuración de DPI en sus metadatos.
Pero esto no es más que un atributo 'pista' que no altera la imagen ráster subyacente. Esa es la razón por la que hiciste este descubrimiento:
Esta 'sugerencia' posiblemente puede ser evaluada automáticamente por controladores de impresora o por programas de creación de páginas como LaTeX. En ausencia de tales 'sugerencias' de DPI (o si de alguna manera no se presentan de la manera que LaTeX espera que lo hagan), LaTeX aún debería poder ordenar que renderice cualquier imagen dada en una página de la manera que uno espera a - solo necesita un código LaTeX más explícito alrededor de la imagen.
Algunos otros formatos de imagen (JPEG (?), BMP, ...) ni siquiera admiten almacenar una sugerencia de DPI en sus metadatos internos.
Por lo tanto, Gimp solo admite lo que ves que está haciendo con "Imagen -> Tamaño de impresión" porque quiere imprimir una imagen. Con ImageMagick no puede imprimir.
Siga haciendo lo que quiera hacer con Gimp cuando imprima. No tiene sentido con ImageMagick.
Consulte también este fragmento adicional de documentación de MI , que explica el mismo tema en diferentes palabras.
Entonces, lo que queda es esto:
Proporcione lo siguiente para resolver el problema anterior:
convert -version
yconvert -list configure
);De esta manera podemos ayudar a resolver el problema.
Pero tenga en cuenta: este es un problema diferente de lo que pregunta su tema / título actual: "Quiero cambiar DPI con Imagemagick sin cambiar el tamaño de byte real de los datos de imagen"
Actualizar
Como todavía no está claro para algunos lectores lo que noté anteriormente, aquí hay un intento más ...
Cualquier cosa que se indique como 'Resolución' o 'Densidad' dentro de un archivo de imagen, es un atributo de metadatos . No tiene influencia sobre el número de píxeles reales descritos por el archivo y es completamente irrelevante a este respecto. Es solo una pista que un dispositivo de impresión o renderizado o una aplicación puede seguir o no al imprimir, renderizar o mostrar la imagen.
Para este propósito, es solo un número almacenado en el archivo de imagen. Estos números le indican a los dispositivos de salida, como impresoras, y muestran cuántos puntos (o píxeles) por pulgada debe mostrarse la imagen. Para formatos vectoriales como PostScript, PDF, MWF y SVG, le dice a la escala de píxeles que dibuje las coordenadas del mundo real utilizadas por la imagen.
Un ejemplo, donde una aplicación NO respeta el valor de resolución observado por ImageMagick dentro de los metadatos de la imagen , es Adobe Photoshop. Photoshop almacena sus sugerencias sobre la resolución de impresión o visualización deseada en un perfil propietario llamado 8bim . ImageMagick no toca este perfil, incluso cuando se le pide que escriba un cambio de resolución en los metadatos de un archivo de imagen. Photoshop, por otro lado, ignorará todas las sugerencias de resolución almacenadas por ImageMagick en el campo de metadatos estándar que se define para este propósito tan pronto como vea su propio perfil 8bim .
El OP debería haber elegido el título:
para evitar todos los malentendidos ...
fuente