Je recherche un moyen rapide d'obtenir la hauteur et la largeur d'une image en pixels. Il doit gérer au moins JPG, PNG et TIFF, mais plus il y en a, mieux c'est. J'insiste vite car mes images sont assez grandes (jusqu'à 250 Mo) et il faut tellement de temps pour obtenir la taille avec ImageMagick identify
car il lit évidemment les images dans leur ensemble en premier.
De préférence, je cherche un moyen qui fonctionne bien dans Ruby, ou même dans Rails 3.
Je connais la théorie (différents formats d'image, leurs en-têtes et leurs différences, etc.). En effet, je demande une sorte de bibliothèque qui puisse résoudre mon problème de manière assez générique.
Je viens de trouver une taille d'image qui semble prometteuse bien que le développement semble être mort.
Réponses:
La
file
commande imprime les dimensions de plusieurs formats d'image (par exemple PNG, GIF, JPEG; versions récentes également PPM, WEBP) et ne lit que l'en-tête.La
identify
commande (d'ImageMagick) imprime beaucoup d'informations d'image pour une grande variété d'images. Il semble se limiter à la lecture de la partie d'en-tête (voir les commentaires). Il a également une sortie unifiée quifile
manque malheureusement.exiv2
vous donne des dimensions pour de nombreux formats, y compris JPEG, TIFF, PNG, GIF, WEBP, même si aucun en-tête EXIF n'est présent. On ne sait pas s'il lit toutes les données pour cela. Consultez la page de manuel d'exiv2 pour tous les formats d'image pris en charge.head -n1
vous donnera les dimensions pour les formats PPM, PGM.Pour les formats populaires sur le web, à la fois
exiv2
etidentify
fera le travail. Selon le cas d'utilisation, vous devrez peut-être écrire votre propre script qui combine / analyse les sorties de plusieurs outils.la source
Je ne suis pas sûr que php soit installé, mais cette fonction PHP est assez pratique
la source
Vous pouvez utiliser la fonction d' identification d'ImageMagick . Voici comment procéder dans bash (notez que $ 0 est le chemin de l'image):
Et cela masque également tous les messages d'erreur potentiels. Les implémentations modernes
identify
ne lisent que l'en-tête, pas l'image entière, donc c'est rapide. Je ne sais pas comment cela se compare aux autres méthodes.la source
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 ou WMF)
Ici pour deux formats PNG et JPG.
Mon code est issu d'une classe conçue pour mon usage, vous pouvez le modifier selon vos besoins.
Veuillez vérifier ces fonctions / méthodes en utilisant PHP :
Utilisation du code PHP:
Maintenant, ces fonctions / méthode utilisant JAVA :
Utilisation du code Java:
la source
ref
/out
parameters en Java - est-ce considéré comme une meilleure pratique?Ce sont les dimensions en pixels que vous voulez (largeur et hauteur), je suppose?
Je pense que la plupart des formats de fichiers ont des informations d'en-tête définissant les dimensions, de sorte que le logiciel qui lit le fichier puisse savoir combien d'espace il doit réserver avant de commencer à lire le fichier. Certains formats de fichiers de type "brut" peuvent simplement être un flux d'octets avec un octet "fin de ligne" à la fin de chaque ligne horizontale de pixels (auquel cas le logiciel doit lire la première ligne et diviser la taille du flux d'octets par la longueur de la ligne pour obtenir la hauteur).
Je ne pense pas que vous puissiez faire cela de manière "générique", car vous devez comprendre le format du fichier (ou utiliser une bibliothèque bien sûr) pour savoir comment le lire. Vous pouvez probablement trouver du code qui, dans la plupart des cas, donnera une estimation approximative des dimensions sans lire le fichier entier, mais je pense que certains types de fichiers peuvent vous obliger à lire le fichier entier pour être sûr de ses dimensions réelles. Je m'attends à ce que la plupart des formats d'image centrés sur le Web aient un en-tête avec de telles informations afin que le navigateur puisse créer les dimensions de la boîte avant que l'image entière ne soit chargée.
Je suppose qu'une bonne bibliothèque aurait des méthodes pour obtenir les dimensions des fichiers qu'elle gère, et que ces méthodes seraient implémentées aussi efficacement que possible.
Mise à jour : imageinfo semble faire ce que vous voulez. (Je ne l'ai pas testé)
la source
Si vous avez des informations EXIF dans les images, vous pouvez simplement lire l'en-tête EXIF.
la source
-ping est une option qui semble avoir été introduite à cet effet.
Cependant, à partir d'ImageMagick 6.7.7, je n'observe pas de ralentissement même pour tous les gros fichiers, par exemple:
Pouvez-vous produire un exemple d'image d'entrée pour lequel il est encore lent?
la source
tldr: le fichier "imagename" fera l'affaire
fonctionne avec webp, tous les formats jpg (jpeg, jpg200, ..),
Exemple de sortie ressemble à
chargez la sortie du fichier dans une liste python et utilisez le 4ème champ de la liste.
FYI, a optimisé plus de 18000 images pour réduire le trafic réseau.
la source