Estoy buscando una forma rápida de obtener la altura y el ancho de una imagen en píxeles. Debe manejar al menos JPG, PNG y TIFF, pero cuanto más mejor. Destaco rápido porque mis imágenes son bastante grandes (hasta 250 MB) y toma mucho tiempo obtener el tamaño con ImageMagick identify
porque obviamente primero lee las imágenes como un todo.
Preferiblemente, busco una forma que funcione bien en Ruby, o incluso en Rails 3.
Conozco la teoría (varios formatos de imagen, sus encabezados y sus diferencias, etc.). De hecho, solicito algún tipo de biblioteca que pueda resolver mi problema de una manera bastante genérica.
Acabo de encontrar el tamaño de imagen que parece prometedor, aunque el desarrollo parece estar muerto.
Respuestas:
El
file
comando imprime las dimensiones para varios formatos de imagen (por ejemplo, PNG, GIF, JPEG; versiones recientes también PPM, WEBP), y solo lee el encabezado.El
identify
comando (de ImageMagick) imprime mucha información de imagen para una amplia variedad de imágenes. Parece limitarse a leer la parte del encabezado (ver comentarios). También tiene una salida unificada quefile
lamentablemente carece.exiv2
le brinda dimensiones para muchos formatos, incluidos JPEG, TIFF, PNG, GIF, WEBP, incluso si no hay un encabezado EXIF presente. Sin embargo, no está claro si lee toda la información para eso. Consulte la página de manual de exiv2 para ver todos los formatos de imagen compatibles.head -n1
le dará las dimensiones para los formatos PPM, PGM.Para los formatos populares en la web, tanto
exiv2
yidentify
hará el trabajo. Dependiendo del caso de uso, es posible que deba escribir su propio script que combine / analice los resultados de varias herramientas.fuente
No estoy seguro de que tenga instalado php, pero esta función PHP es bastante útil
fuente
Puede usar la función de identificación de ImageMagick . Así es como lo haces en bash (Nota $ 0 es la ruta de la imagen):
Y esto también oculta cualquier mensaje de error potencial. Las implementaciones modernas de
identify
solo leen el encabezado, no toda la imagen, por lo que es rápido. Sin embargo, no estoy seguro de cómo se compara con otros métodos.fuente
read width height < <(identify -format "%w %h" "${1}")
https://joseluisbz.wordpress.com/2013/08/06/obtaining-size-or-dimension-of-images/ (BMP, PNG, GIF, JPG, TIF o WMF)
Aquí para dos formatos PNG y JPG.
Mi código es de una clase diseñada para mi uso, puede editar según sus necesidades.
Por favor revise estas funciones / método usando PHP :
Usando el código PHP:
Ahora estas funciones / método usando JAVA :
Usando el código Java:
fuente
ref
/out
parámetros en Java: ¿se considera la mejor práctica?Supongo que son las dimensiones en píxeles que desea (ancho y alto).
Creo que la mayoría de los formatos de archivo tienen información de encabezado que define las dimensiones, de modo que el software que lee el archivo puede saber cuánto espacio debe reservar antes de comenzar a leer el archivo. Algunos formatos de archivo de tipo "sin formato" podrían ser solo una secuencia de bytes con algún byte de "fin de línea" al final de cada fila horizontal de píxeles (en cuyo caso el software debe leer la primera línea y dividir el tamaño de la secuencia de bytes por la longitud de la línea para obtener la altura).
No creo que pueda hacer esto de ninguna manera "genérica", ya que necesita comprender el formato del archivo (o usar una biblioteca, por supuesto) para saber cómo leerlo. Probablemente pueda encontrar algún código que en la mayoría de los casos proporcione una estimación aproximada de las dimensiones sin leer el archivo completo, pero creo que algunos tipos de archivos pueden requerir que lea todo el archivo para asegurarse de qué dimensiones tiene realmente. Espero que la mayoría de los formatos de imagen centrados en la web tengan un encabezado con dicha información para que el navegador pueda crear las dimensiones del cuadro antes de que se cargue toda la imagen.
Supongo que una buena biblioteca tendría algunos métodos para obtener las dimensiones de los archivos que maneja, y que esos métodos se implementarían de la manera más eficiente posible.
Actualización : imageinfo parece que hace lo que quieres. (No lo he probado)
fuente
Si tiene información EXIF en las imágenes, puede leer el encabezado EXIF.
fuente
-ping es una opción que parece haber introducido para ese propósito.
Sin embargo, a partir de ImageMagick 6.7.7 no observo la desaceleración incluso para todos los archivos grandes, por ejemplo:
¿Puedes producir una imagen de entrada de ejemplo para la que todavía es lenta?
fuente
tldr: el archivo "nombre de imagen" servirá
funciona con webp, todos los formatos jpg (jpeg, jpg200, ..),
La salida de muestra se parece a
cargue la salida del archivo a una lista de python y use el 4º campo en la lista.
FYI, optimizó alrededor de 18000+ imágenes para reducir el tráfico de red.
fuente