Estoy buscando una manera de cambiar el DPI en archivos de imagen PNG. Usando ImageMagick esto es fácil:
$ convert -density 150 -units pixelsperinch file.png file.png
El problema es que ejecutaré este comando desde mi aplicación, ejecutándolo en varias máquinas virtuales, que no tienen instalado ImageMagick. Puedo enviar los paquetes de actualización a estas máquinas virtuales, pero en el caso de ImageMagick eso agregaría aproximadamente 30 MB a un paquete de actualización, lo cual es demasiado para mi caso de uso.
En pocas palabras : ¿hay alguna manera de cambiar el DPI en un archivo PNG usando una pequeña herramienta de línea de comandos (como en el tamaño del paquete)?
Opcionalmente, cambiar bytes en un archivo de imagen sin formato también estaría bien, si alguien sabe dónde buscarlos ...
pHYs
fragmento prefabricado de un PNG hecho en Photoshop.Respuestas:
¿Es 2.10 MB lo suficientemente pequeño? En caso afirmativo, use NConvert y un comando por lotes como:
¿Para qué sirve NConvert?
XnView es una aplicación basada en GUI, puede cambiar y manipular imágenes utilizando una interfaz gráfica de usuario. NConvert tiene aproximadamente las mismas capacidades que XnView, pero es una herramienta de línea de comandos y no tiene una interfaz gráfica de usuario. Puede usar NConvert en scripts de Batch u otra aplicación puede llamarlo.
Enlaces Útiles
fuente
Usted mencionó que estaría ejecutando este comando "desde su aplicación", y esto me lleva a creer que ha escrito esta aplicación o la está manteniendo. Dicho esto, hay API de ImageMagick para varios idiomas, y puede usar uno de ellos para agregar la funcionalidad directamente a su programa existente. El aumento en el tamaño del paquete dependerá del idioma en el que esté escrita su aplicación y de si vincula la biblioteca de forma estática o dinámica, pero me imagino que sería significativamente menor que un aumento de 30 MB.
Otra opción es no incluir todo el paquete ImageMagick. Puede descargar el archivo Zip ImageMagick (que solo tiene 13 MB BTW), extraer solo la
convert
herramienta y sus dependencias y distribuirla a sus máquinas virtuales. Hay una herramienta llamada Dependency Walker que puede usar para determinar cuáles son las dependencias de laconvert
herramienta.fuente
Use la
-size
bandera en el programa netpbm pnmtopng . Las unidades utilizadas son píxeles por metro. El siguiente ejemplo establecerá newfile.png en 300 ppp.fuente
Bueno, potencialmente podrías usar un script de Python.
Fuente .
fuente
La línea de comando "convertir" de Image Magick adecuada para esto sería usar el argumento -resample:
fuente