¿Hay un comando de shell que devuelve el tamaño de píxel de una imagen?
Estoy tratando de producir un gif animado a partir de diferentes gifs con diferentes tamaños usando convert
(por ejemplo convert -delay 50 1.gif 2.gif -loop 0 animated.gif
).
El problema es que la conversión simplemente se superpone a las imágenes usando el tamaño de la primera imagen como el tamaño del gif animado, y dado que tienen tamaños diferentes, el resultado es un poco desordenado, con fragmentos de los marcos antiguos que se muestran debajo de los nuevos.
Respuestas:
encontré una solución:
identify
parte del paquete imagemagick, hace exactamente lo que necesitofuente
identify imagename.ico
?Like todour.ico[0] ICO 32x32 32x32+0+0 4-bit sRGB 0.000u 0:00.000
todour.ico[1] ICO 16x16 16x16+0+0 4-bit sRGB 0.000u 0:00.000
todour.ico[2] ICO 48x48 48x48+0+0 8-bit sRGB 0.000u 0:00.000
En lugar de analizar la salida
identify
por ojo o por las utilidades de texto, puede usar su-format
opción para generar el ancho y la altura en el formato que más le convenga. Por ejemplo:Puede encontrar una lista de propiedades de imagen que puede generar en esta página , pero para la pregunta aquí, parece que todo lo que necesita son ,
%w
y%h
que dan el ancho y alto de la imagen, respectivamente, en píxeles.La flexibilidad que me brindó
-format
fue útil para encontrar las imágenes más grandes en términos de píxeles, al generar%[fx:w*h]
una cantidad de imágenes y ordenar la salida.Es posible que desee especificar la
-ping
opción si está procesando muchas imágenes, utilizando escapes más complicados, y desea asegurarse de que el programa no pierda el tiempo cargando las imágenes completas. Con escapes simples,-ping
debería ser el valor predeterminado. Puede encontrar más información sobre la elección entre-ping
y aquí .+ping
fuente
simplemente puede usar el comando "archivo" para obtener la información que necesita:
fuente
file taylor-swift-money-makers-990.jpg
->taylor-swift-money-makers-990.jpg: JPEG image data, JFIF standard 1.01, comment: "CREATOR: gd-jpeg v1.0 (using IJ"
Use
identify
para ver los tamaños:Extraer valor a través
cut | sed
del campo 3:Asignar a variable:
fuente
Ambos
display
yfile
son bastante lentos, y tienen el potencial de poner de rodillas incluso a sistemas bastante capaces que manejan muchos archivos múltiples. Una pequeña prueba:Al leer solo los bytes necesarios, esta operación se puede acelerar significativamente.
Aquí está pngsize:
Este método es mucho más rápido que usar una biblioteca que carga el PNG hacia adelante, hacia atrás y hacia los lados solo para obtener el tamaño de la imagen: P (Considere el código cuidadosamente antes de alimentarlo en un directorio lleno de PNG arbitrarios, por supuesto).
Los usos de código inet.h para htonl () para de- endian -ize el orden de los bytes de cabecera.
fuente
También puede probar GraphicsMagick , que es una bifurcación bien mantenida de ImageMagick utilizada, por ejemplo, en Flickr y Etsy:
Es más rápido que la identificación de ImageMagick (en mis pruebas aproximadamente dos veces).
fuente
Este fue un fragmento útil (no escribí) que devuelve dimensiones para cada png y jpg en la carpeta:
fuente
Para aquellos como yo que quieren el tamaño en megapíxeles:
fuente